4

我遇到了与thisthis相同的问题,但在 Java 域中。这个问题也涵盖了我想要的东西,但由于没有答案,我想我会在这里问它,并提供更多细节。

我大部分的方式是通过编写一个 Java 应用程序来将文件备份到 Google Drive。正如其他人所发现的那样,“内部服务器错误 500”故障是上传中非常常见的问题,但对于小文件,实施推荐的指数回退和重试可以正常工作。然而,对于大文件(任何超过几 MB 的文件),失败率高得令人无法接受。在某些情况下,我的故障率远远超过 50%,这使得任何长时间的备份工作实际上都变得不可能。

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

问题

似乎没有使用 API 设置此 up​​loadType 参数的方法。有一个方法调用来设置每个可选参数(如这里详述),但不是一种将 uploadType 设置为可恢复的方法。没有代码片段,没有文档,什么都没有。

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

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

祝大家欢呼。

大卫。

4

2 回答 2

3

简短的回答:

当您使用 Google Drive java 客户端 API 时,传递给 MediaHttpUploader 的可恢复上传的 URI 似乎与Google Drive API V2上提出的相同。所以实际上默认情况下,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) 将使用可恢复上传而不是直接上传。

于 2014-01-04T06:59:00.587 回答
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。

于 2013-10-14T14:16:53.050 回答