我对可恢复上传到谷歌驱动器感到有点困惑,我希望有人能够善意地澄清一些事情。
在此页面:
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
它说:
通过可恢复上传,您可以将文件分成块并发送一系列请求以按顺序上传每个块。这不是首选方法,因为存在与附加请求相关的性能成本,并且通常不需要它。
这两个陈述中哪一个是正确的?
提前感谢任何输入。
安德烈亚斯
答案 0 :(得分:0)
安德烈亚斯,
我相信带有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(),而不是。
关于可恢复上传的性能成本,有额外的信息被发送,但我不认为它会减慢太多的过程...你可以使用更大的chunksizes(一些MiB),以便额外的请求字节可以忽略不计。 SDK文档确实支持某些环境中的可恢复上传:
“为了更可靠地上传数据文件,您可以使用可恢复的上传协议。此协议允许您在通信故障中断数据流后恢复上传操作。如果您要传输大文件和例如,从移动客户端应用程序上传时,网络中断或其他传输故障的可能性很高。它还可以在网络出现故障时减少带宽使用,因为您不必重新启动大型文件上传一开始。“