java - 将大文件插入 Google 驱动器时出现 IOException "insufficient data written"

标签 java io google-api google-drive-api google-api-java-client

我正在尝试使用 google-api-services-drive 版本 v2-rev93-1.16.0-rc 将大文件插入 Google 的驱动器 我已将 setChunkSize() 设置为最小值,以便更频繁地通知我自己的 ProgressListener。以下代码用于插入文件:

File body = new File();
body.setTitle(filetobeuploaded.getName());
body.setMimeType("application/zip");
body.setFileSize(filetobeuploaded.length());

InputStreamContent mediaContent =
        new InputStreamContent("application/zip",
        new BufferedInputStream(new FileInputStream(filetobeuploaded)));
mediaContent.setLength(filetobeuploaded.length());

Insert insert = drive.files().insert(body, mediaContent);
MediaHttpUploader uploader = insert.getMediaHttpUploader();
uploader.setChunkSize(MediaHttpUploader.MINIMUM_CHUNK_SIZE);
uploader.setProgressListener(new CustomProgressListener(filetobeuploaded));
insert.execute();

“一段时间”后(有时 200 MB 有时 300 MB)我得到了 IOException :

Exception in thread "main" java.io.IOException: insufficient data written
at sun.net.www.protocol.http.HttpURLConnection$StreamingOutputStream.close(HttpURLConnection.java:3213)
at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:81)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:960)
at com.google.api.client.googleapis.media.MediaHttpUploader.executeCurrentRequest(MediaHttpUploader.java:482)
at com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:390)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:418)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)

有什么想法可以让这段代码正常工作吗?

最佳答案

由于时间限制,您将无法从前端运行它。唯一可靠的方法(但很痛苦)是使用可恢复上传从后端执行此操作,因为后端/任务队列也可能在处理 block 时关闭。

关于java - 将大文件插入 Google 驱动器时出现 IOException "insufficient data written",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18421334/

相关文章:

java - 在 Java 下的 Saxon 中加载和验证 XML 文件和架构的示例代码

google-api - 来自 Google API 的电影放映时间和 map

c# - Google 电子表格查询返回空单元格

java - Java 中的 "goto"替代方案

java - 多级继承不起作用

IO :Class (NoMethodError) 的 Ruby 未定义方法 `write'

haskell - 无法写入句柄

python-2.7 - 如何通过 REST API 将文件上传到我自己的 Google 云端硬盘

服务帐户上的 Java Google Calendar api "access_denied"

linux - 如何在Linux下的MATLAB(例如Ubuntu 14.04)下使COBRA工具箱在适当的SBML支持下工作?