如何使用谷歌api ruby客户端将可恢复上传到谷歌硬盘



我在将大型文件从Linux桌面上传到GDrive时遇到问题(使用Grive,它不提供恢复,甚至不监控大型上传)。

因此,我尝试使用googleapi-ruby编写一个小脚本来完成这项工作。

当谷歌驱动文档谈论可恢复上传时——https://developers.google.com/drive/manage-uploads#resumable–我试图使用谷歌api ruby实现可恢复上传,并找到了Google::APIClient::ResumableUpload类。

示例对于理解这个rubyish API的工作原理非常有用,但示例并没有提出可恢复上传的问题。

Google::APIClient::ResumableUploadment是用于文档所说的可恢复上传,还是该Ruby客户端提供的一个方便类?

当我调用executeexecute时,Google::APIClient::ResumableUpload构造函数会消耗我得到的Google::APIClient::ResultGoogle::APIClient实例上。

据我所知,execute方法仅适用于暴露于Discovery API的Google API方法(如drive.files.insert)。

不幸的是,可恢复上传与以下URI:绑定

https://www.googleapis.com/upload/drive/v2/files?uploadType=resumable

并且似乎还不是Discovery的一部分,或者集成到"更干净"的URI方案中(为什么是upload/drive而不是drive/upload?)。

是否可以对此API URI使用Google::APIClient执行方法,以便将其与Google::APIClient::ResumableUpload组合,或者我是否必须自己实现可恢复上载(例如使用em-http-request)?

请参阅files.insert的示例了解基本信息。在该示例中,它使用多部分,但切换到可恢复状态相当简单。大多数情况下需要将uploadType参数更改为"可恢复"。插入/更新的结果将包含对上传器的引用,您可以使用该引用来发送内容/检查是否完成。

media = Google::APIClient::UploadIO.new(file_name, mime_type)
result = client.execute(
:api_method => drive.files.insert,
:body_object => file,
:media => media,
:parameters => {
'uploadType' => 'resumable',
'alt' => 'json'})
# Send content
result.resumable_upload.send_all(client)

在即将发布的客户端库测试版中(现在的任何一天:),这将略有改变,以便无论协议如何,上传都能更加一致地工作。在大多数情况下,调用execute()就足够了,它将尝试上传文件。但现有的方法仍然有效。你也可以通过拨打来恢复简历

if !result.resumable_upload.complete?
client.execute(result.resumable_upload) # Continue sending... 
end

示例没有显示错误处理,但您可以检查结果。sumable_upload.complete?或者.过期了?以检查状态。不完整的可恢复上载将在一段时间(大约一个小时)不活动后过期。如果过期,您需要从头开始。

最新更新