我在将大型文件从Linux上传到GDrive时遇到问题(使用Grive,它不提供恢复,甚至不监视更大的上传)。
所以我开始尝试使用来编写一个小脚本来完成这个任务。
当Google驱动文档讨论Resumableupads-https://developers.google.com/drive/manage-uploads#resumable时,我试图使用google实现可恢复上传,并找到了Google::APIClient::ResumableUpload类。
示例对于理解这个rubyish API的工作原理非常有用,但是示例不涉及Resumable上载的问题。
Google::APIClient::ResumableUpload类ment是否用于文档正在讨论的可恢复上载,或者更确切地说是由这个Ruby提供的一个传输类?
当我调用或执行Google::APIClient::ResumableUpload构造函数时,它会消耗我得到的Google::APIClient::Result!在Google::APIClient实例上。
据我所知,execute方法只适用于Google方法,这些方法暴露在Discovery (如drive.files.insert)中。
不幸的是,可还原的上传与以下URI相关联:
https://www.googleapis.com/upload/drive/v2/files?uploadType=resumable
而且似乎还没有成为发现的一部分,也没有集成到“更干净”的URI方案中(为什么是upload/drive而不是drive/upload?)。
是否有可能对这个API使用Google::APIClient执行方法,以便将它与Google::APIClient::ResumableUpload代码结合起来--我是否必须自己实现可恢复上传(例如,通过使用em-http-request)?
发布于 2012-10-02 00:18:07
有关基础知识,请参阅files.insert示例。在这个例子中,它使用多部分,但是切换到可恢复是相当简单的。通常需要将uploadType参数更改为“可恢复”。insert/update的结果将包含对上传器的引用,而不是用来发送内容/检查是否完成。
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示例没有显示错误处理,但是可以检查result.resumable_upload.complete吗?还是.expired?检查状态。不完整的可恢复上传在一段不活动期后到期(大约一个小时左右)。如果过期,则需要从头开始重新启动。
https://stackoverflow.com/questions/12422690
复制相似问题