java - 在 Google Drive Java API 中设置 uploadType

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

我遇到了与 this 相同的问题和 this但是在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 设置为可恢复的方法。没有代码片段,没有文档,什么都没有。

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

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

给大家加油。

大卫。

最佳答案

简答:

当您使用 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

你会发现驱动器 的构造函数将 URI 传递给 驱动器请求 ,它还将变量 uriTemplate 传递给 AbstractGoogleJsonClientRequest .最后 AbstractGoogleJsonClientRequest 使用 buildHttpRequestUrl() 生成 Google Drive API reference 中提出的可恢复 URI .此 URI 存储在 中的变量 httpRequestUrl 中。 AbstractGoogleJsonClientRequest . httpRequestUrl 然后将被传递给 uploader's upload方法。此 method默认情况下(directUploadEnabled 默认为 false)将使用可恢复上传而不是直接上传。

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

相关文章:

java - 导入时出现 Google Drive 错误

ios - 文件未写入文档目录吗?

php - Google Drive PHP Client Library 检索文件资源列表

java - Action 栏中的导航夏洛克

java - 总是要求密码 KeyStore PKCS11

HashMap 中的 Java 存储特定类类型

python - 通过 Flask 上传多个文件或整个文件夹

java - eureka服务器中fetchRegistry属性有什么用?

html - 是否可以在文件上传html控件中更改“浏览”按钮的样式?

javascript - 使用一个ajax调用发送上传的文件和其他数据