【问题标题】:Setting uploadType in Google Drive Java API在 Google Drive Java API 中设置 uploadType
【发布时间】:2013-10-14 13:08:11
【问题描述】:

我遇到了与thisthis 相同的问题,但在Java 域中。 This 问题也涵盖了我想要的,但由于没有答案,我想我会在这里问它,更详细一点。

我主要是通过编写 Java 应用程序来将文件备份到 Google Drive。正如其他人发现的那样,“内部服务器错误 500”失败是上传的一个很常见的问题,但对于小文件,实现 recommended exponential back-off and retry 工作正常。然而,对于大文件(任何超过几 MB 的文件),失败率高得令人无法接受。在某些情况下,我的故障率远远超过 50%,这使得任何长时间的备份工作实际上都变得不可能。

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

问题

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

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

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

大家干杯。

大卫。

【问题讨论】:

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


    【解决方案1】:

    简答:

    当您使用 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 reference 中建议的可恢复 URI。此 URI 存储在 AbstractGoogleJsonClientRequest 中的变量 httpRequestUrl 中。 httpRequestUrl 然后将被传递给uploader's upload 方法。此method 默认情况下(directUploadEnabled 默认为 false)将使用可恢复上传而不是直接上传。

    【讨论】:

      【解决方案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。

      【讨论】:

      • 是的,这是我在问题中提到的分块可恢复 media 上传(我已禁用它,因为它似乎不起作用)。正如您所说,该来源与 Drive API 无关。整个事情都是一团糟。
      • 在浏览文档时,我发现自己在兜圈子,经常出现在与旧 API 相关的页面上。这不是很有趣。
      • 开发者非常喜欢 Builder 模式,所以我猜你对 http 上传器的控制是在服务构建时完成的,而不是作为上传方法的参数。我有点猜测,因为我前段时间停止尝试使用这些库。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多