在Google Drive Java API中设置uploadType

我遇到了与此相同的问题,但是在Java域中。 这个问题也涵盖了我想要的内容,但由于没有答案,我想我会在这里提出一些更详细的问题。

我通过编写Java应用程序来将文件备份到Google云端硬盘。 正如其他人所发现的那样,“内部服务器错误500”失败是上传时非常常见的问题,但对于小文件,实现建议的指数退避和重试工作正常。 但是,对于大型文件(任何超过几MB),故障率都高得令人无法接受。 在某些情况下,我的失败率超过50%,这使得任何长期备份工作都无法实现。

使用Google Drive v2 API插入(上传)文件时, 文档会明确指出可以使用三种上传类型:简单,多部分和可恢复。 通过向端点URL添加参数来指定上载类型。 显然,我所追求的是可恢复的上传类型。

问题

似乎没有方法可以使用API​​设置此uploadType参数。 有一个方法调用来设置每个可选参数(如此处详述),但没有嗅探将uploadType设置为可恢复的方法。 没有代码片段,没有文档,没有任何内容。

有点令人困惑的是,似乎还有一个不相关的“分块”媒体上传模式,这是默认的,我实际上已通过调用request.getMediaHttpUploader().setDirectUploadEnabled(true)禁用我的应用程序,因为它似乎对上传的可靠性没有任何影响,无论chunksize设置的是什么,它都会大大减慢上传速度。

我正在绕过API并手动构建请求,但我真的想知道是否有其他人遇到过/先解决了这个问题。 这是一个明显的遗漏,我无法相信很多人以前没有遇到它。

干杯全都。

大卫。

简短回答:

当您使用Google Drive java客户端API时,传递给MediaHttpUploader的可恢复上传的URI似乎与Google Drive API V2上提供的URI相同。 实际上,默认情况下,Google Drive Java客户端API已经在使用可恢复上传。

答案很长:

完全跟踪Google Drive Java API客户端中的代码后

com.google.api.services.drive.Drive

– > com.google.api.services.drive.DriveRequest

– > com.google.api.client.googleapis.services.AbstractGoogleJsonClientRequest

你会发现Drive的构造函数将URI传递给DriveRequest ,它还将变量uriTemplate传递给AbstractGoogleJsonClientRequest 。 最后, AbstractGoogleJsonClientRequest使用buildHttpRequestUrl()生成Google Drive API参考中提出的可恢复URI。 此URI存储在AbstractGoogleJsonClientRequest中的变量httpRequestUrl中。 然后将httpRequestUrl传递给上传者的上传方法。 默认情况下此方法 ( directUploadEnabled默认为false)将使用可恢复上载而不是直接上载。

此页面上有一个示例https://developers.google.com/gdata/docs/resumable_upload?csw=1#InitialRequestJava

现在,这里让人感到困惑。 该页据称涉及旧式Gdata api。 但是,当前源代码位于https://code.google.com/p/google-api-java-client/source/browse/google-api-client/src/main/java/com/google/api/client/ googleapis / media / MediaHttpUploader.java将该页面引用为它实现的API。