【问题标题】:Correct usage of resumable upload with the python client library使用 python 客户端库正确使用可恢复上传
【发布时间】:2012-12-22 10:21:08
【问题描述】:

我对可恢复上传到谷歌驱动器有点困惑,我希望有人能善意地澄清一下。

在这个页面: https://developers.google.com/api-client-library/python/guide/media_upload
它指出:

对于大型媒体文件,您可以使用可恢复媒体上传来发送文件,这允许文件以较小的块上传。

还描述了使用 next_chunk() 执行此操作、检查错误和使用指数重试的方法。

所有其他关于上传的引用,无论是插入还是更新文件,都使用“resumable=True”,但没有实现“next_chunk”功能。喜欢这个页面:https://developers.google.com/drive/v2/reference/files/insert#examples

这是否意味着“可恢复”由库处理?
如果不是,如果出现错误,是否与上一个示例中的相同(使用 next_chunk)?
如果我的应用程序应该捕获错误,那么唯一的方法是从头开始上传,因为没有返回成功字节或其他内容。这是正确的方法吗?

也在这个页面:https://developers.google.com/drive/manage-uploads
它指出:

通过可恢复上传,您可以将文件分成块并发送一系列请求以按顺序上传每个块。这不是首选方法,因为额外请求会产生性能成本,而且通常不需要。

这两种说法哪一种是正确的?

提前感谢您的任何意见。
安德烈亚斯

【问题讨论】:

    标签: google-drive-api google-api-python-client


    【解决方案1】:

    安德烈亚斯,

    我相信带有 resumable=true 属性的 service.files.insert().execute() 的作用类似于您发布的示例中的手动 next_chunk ...我不确定它是如何处理它的,因为我找不到读取源代码的方法(我只是从 python 开始),但是如果我使用 .insert().execute() 方法和 resumable=true 中断大文件的上传,其中一个输出的行是这样的:

    File "/usr/lib/python2.5/site-packages/apiclient/http.py", line 656, in execute
      _, body = self.next_chunk(http=http)
    

    但是,我找不到使用此方法获取进度指示器的方法,因此我更喜欢使用手动 request.next_chunk()。

    关于可恢复上传的性能成本,有额外的信息被发送,但我认为这不会太慢这个过程......你可以使用更大的块大小(一些 MiB),这样额外的请求字节可以忽略不计。在某些情况下,SDK 文档确实支持可恢复上传:

    “为了更可靠地上传数据文件,您可以使用可恢复上传协议。该协议允许您在通信故障中断数据流后恢复上传操作。如果您正在传输大文件和网络中断或其他传输失败的可能性很高,例如,从移动客户端应用程序上传时。它还可以在网络故障的情况下减少您的带宽使用,因为您不必重新从开始。”

    【讨论】:

      猜你喜欢
      • 2016-06-17
      • 2018-10-09
      • 1970-01-01
      • 2015-03-19
      • 2015-07-26
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多