0

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

所以我想尝试使用google-api-ruby编写一个小脚本来完成这项工作。

由于 Google 驱动文档讨论可恢复上传- https://developers.google.com/drive/manage-uploads#resumable - 我试图使用google-api-ruby实现可恢复上传并找到类。Google::APIClient::ResumableUpload

示例对于理解这个 ruby​​ish API 的工作原理非常有用,但示例并没有提出 Resumable uploads的问题。

是要用于文档正在谈论的可恢复上传Google::APIClient::ResumableUpload的类,还是这个Ruby客户端提供的conveicence类?

Google::APIClient::ResumableUploadGoogle::APIClient::Result当我调用execute或执行时,构造函数会消耗我得到的一个在一个Google::APIClient实例上。

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

不幸的是,可恢复上传与以下 URI 相关联:

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

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

是否可以为此 API URI 使用Google::APIClient 执行方法以便将其与Google::APIClient::ResumableUploadoder 结合起来我是否必须自己实现可恢复上传(例如通过使用em-http-request)?

4

1 回答 1

3

有关基础知识,请参阅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)

在即将发布的客户端库的 beta 版本中(现在任何一天 :),这将略有改变,以便上传工作更统一一点,而不管协议如何。在大多数情况下,调用 execute() 就足够了,它会尝试上传文件。但是现有的方法仍然有效。你也可以通过调用来恢复:

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

示例未显示错误处理,但您可以检查 result.resumable_upload.complete? 或.过期?检查状态。不完整的可恢复上传会在一段时间不活动后过期(大约一个小时左右)。如果过期,您需要从头开始重新启动。

于 2012-10-02T00:18:07.460 回答