在Google Drive Java API中设置uploadType

时间:2013-10-14 13:08:12

标签: java file-upload google-drive-api google-api-java-client

我遇到的问题与thisthis相同,但在Java域中。 This问题也涵盖了我想要的内容,但由于没有答案,我想我会在这里提出更多细节。

我大部分时间都是通过编写Java应用程序将文件备份到Google云端硬盘。正如其他人发现的那样,内部服务器错误500'上传失败是一个非常常见的问题,但对于小文件,实现recommended exponential back-off and retry可以正常工作。但是,对于大型文件(任何超过几MB),故障率都高得令人无法接受。在某些情况下,我的失败率超过50%,这使得任何长期备份工作都无法实现。

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

问题

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

有些令人困惑的是,似乎还有一个无关紧要的' chunked'媒体上传模式,这是默认设置,我通过调用request.getMediaHttpUploader().setDirectUploadEnabled(true)在我的应用程序中实际禁用了该模式,因为它似乎对上传的可靠性没有任何影响,无论是什么设置了chunksize to,它大大减慢了上传速度。

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

干杯。

大卫。

2 个答案:

答案 0 :(得分:3)

简答:

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

答案很长:

从Google

中一直跟踪Google Drive Java API客户端中的代码

<强> com.google.api.services.drive.Drive

- &GT;的 com.google.api.services.drive.DriveRequest

- &GT;的 com.google.api.client.googleapis.services.AbstractGoogleJsonClientRequest

您会发现云端硬盘的构造函数将URI传递给 DriveRequest ,它还将变量 uriTemplate 传递给 AbstractGoogleJsonClientRequest < / strong>即可。最后, AbstractGoogleJsonClientRequest 使用 buildHttpRequestUrl()生成Google Drive API reference中建议的可恢复URI。此URI存储在 AbstractGoogleJsonClientRequest 中的变量 httpRequestUrl 中。然后将 httpRequestUrl 传递给uploader's upload方法。默认情况下,此method directUploadEnabled 默认为false)将使用可恢复上传而非直接上传。

答案 1 :(得分:2)

此页面上有一个示例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。