java - 在 Google Drive Java API 中设置上传类型

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

我遇到了与 this 相同的问题和 this但在 Java 领域。 This问题也涵盖了我想要的内容,但由于没有答案,我想我应该在这里问,并提供更多细节。

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

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

问题

似乎没有使用 API 设置此 up​​loadType 参数的方法。有一个方法调用来设置每个可选参数(详见 here ),但没有将 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 reference 中提出的可恢复 URI .此 URI 存储在 AbstractGoogleJsonClientRequest 中的变量 httpRequestUrl 中。 httpRequestUrl 将被传递给 uploader's upload方法。这method默认情况下(directUploadEnabled 默认为 false)将使用可恢复上传而不是直接上传。

关于java - 在 Google Drive Java API 中设置上传类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19360990/

相关文章:

java - 为什么当我在此 java 代码中执行读取-更新-写入时不存在竞争条件?

javascript - 上传多个文件显示错误代码 : 3

reactjs - 在 ReactJS 中使用 .fetch() 上传文件

oauth-2.0 - 如何强制针对特定用户进行 oauth 身份验证

python - 什么云存储服务允许开发者使用免费 API 上传/下载文件?

java - 我应该如何在 JDBC 中使用 try-with-resources?

java - INSERT..RETURNING 在 JOOQ 中不起作用

java - 使用 CommonJ WorkManagerTaskExecutor Spring 3 进行多线程处理

php - 从服务器下载的 .exe 文件损坏

java - 谷歌驱动器中谷歌文档的大小