下载/导出文件时,Google Drive API会获取空的ByteArray

时间:2017-04-14 15:08:01

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

当尝试从Drive中导出文件作为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的块):

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也是如此)。有解决方案吗?

1 个答案:

答案 0 :(得分:1)

如果有人遇到同样的问题:我创建了一张Google云支持的门票,他们发现尽管有200个响应代码,转换仍未成功完成。他们还提到转换在超时时失败,因为文档非常大(转换无法及时完成)。因此,他们建议在转换之前将文档拆分为部分,直到他们修复错误为止。

<强> 修改

Google支持的最新更新:

工程师们仍在调查这个问题,没有ETA来解决问题,也没有取得重大进展。