java - 下载/导出文件时 Google Drive API 获取空 ByteArray

标签 java google-app-engine download google-drive-api

当尝试将文件从云端硬盘导出为 PDF 流(从 gdoc)时,有时我会得到一个空的 InputStream 字节数组(看起来大文件会发生这种情况,但我无法确认!):

InputStream mediaContent = service.files().export(fileId, mimetype).executeMediaAsInputStream();
if(!(mediaContent.available()>0)) {
   throw new IOException("Media content empty, bytes expected");
}

没有抛出异常。我在文档( https://developers.google.com/drive/v3/web/manage-downloads )中看不到任何指定的限制。这个问题有什么解决办法吗?这是一个已知问题吗?

Drive API:Java 客户端版本 v3-rev69-1.22.0

编辑

通过 Google OAuth 2.0 Playground,请求通常可以工作,但有时也会失败(失败是指它返回 http 代码 200,但内容为空!)。 当使用可恢复媒体下载时,我总是得到一个空的 InputStream 字节数组(1MB 的 block ):

Drive.Files.Export request = service.files().export(fileId, mimetype);
request.getMediaHttpDownloader().setProgressListener(new CustomProgressListener());
request.getMediaHttpDownloader().setChunkSize(Constants.CHUNK_SIZE);
request.getMediaHttpDownloader().setDirectDownloadEnabled(false);
InputStream mediaContent = request.executeMediaAsInputStream();

但它不会抛出任何异常(也返回代码 200)。有解决办法吗?

最佳答案

如果有人遇到同样的问题:我向 Google Cloud 支持创建了一张票证,他们发现尽管有 200 响应代码,但转换并未成功完成。他们还提到转换超时失败,因为文档很大(转换无法及时完成)。因此,他们建议作为一种解决方法,在转换之前将文档拆分为多个部分,直到他们修复了自己这边的错误。

编辑

Google 支持的最新更新:

工程师仍在调查此问题,尚无解决方案的预计时间,也没有取得重大进展。

关于java - 下载/导出文件时 Google Drive API 获取空 ByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43414252/

相关文章:

Java:当 URL 请求身份验证时从 URL 下载文件

php - 在 Ajax 提交后强制下载 TCPDF 创建的 PDF

java - 为什么数据在 Google App Engine Java 中调度为无效后插入

google-app-engine - 是否可以向 API Explorer 中的 Cloud Endpoint 字段添加描述?

browser - 默认情况下下载 mp3 而不是在浏览器中播放?

javabridge 设置/安装问题

python - Google App Engine 标准环境中的 Gunicorn 服务器

java - 是否有用于后端进程通信的轻量级 Java 消息队列?

java - 如何重用另一个步骤定义类 Appium/Cucumber/Java 中的方法

模拟 ObjectMapper 时出现 java.lang.VerifyError