gpt4 book ai didi

java - 尝试使用 Java 客户端库将大文本文件插入 Google 云端硬盘时出现超时异常

转载 作者:太空宇宙 更新时间:2023-11-04 13:45:27 24 4
gpt4 key购买 nike

我正在使用 Google Drive API 的 Java 客户端库上传一些文本文件并将其转换为 Google 文档格式。该代码在 Google App Engine 上运行。主要代码段如下所示:

    File fileMetadata = new File();
fileMetadata.setTitle("Document title");
fileMetadata.setDescription("Desc goes here");
fileMetadata.setMimeType("text/plain; charset=utf-8");

ByteArrayContent byteArrayContent = ByteArrayContent.fromString(
"text/plain; charset=utf-8", "Text file's content goes here");

Drive.Files.Insert insertRequest = driveService.files()
.insert(fileMetadata, byteArrayContent).setConvert(true);

File insertedFile = insertRequest.execute();

对于小文本文件,上面的代码可以正常工作。但是当文本文件很大时(也许还有一些我不知道的其他因素),它会抛出以下异常:

Uncaught exception from servlet
java.net.SocketTimeoutException: Timeout while fetching URL: https://www.googleapis.com/upload/drive/v2/files?convert=true&uploadType=resumable&upload_id=AEnB2UpPDz6jvM8zO2zPFxFHmoCiisplOf1Ui5fngZdI4qqoK6hwt_wtOt89RcW3QautW9FPlHKfMznYA4gmo95qdWthJQgWpQ
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.convertApplicationException(URLFetchServiceImpl.java:145)
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:45)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.fetchResponse(URLFetchServiceStreamHandler.java:419)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getInputStream(URLFetchServiceStreamHandler.java:298)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getResponseCode(URLFetchServiceStreamHandler.java:151)
at com.google.api.client.http.javanet.NetHttpResponse.<init>(NetHttpResponse.java:36)
at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:94)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:965)
at com.google.api.client.googleapis.media.MediaHttpUploader.executeCurrentRequestWithoutGZip(MediaHttpUploader.java:545)
at com.google.api.client.googleapis.media.MediaHttpUploader.resumableUpload(MediaHttpUploader.java:417)
at com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:336)
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)

有人说这是由于 URLConnection 超时造成的。但我使用的是 Java 客户端库,它不允许我显式设置超时。此外,上述异常在 insertRequest.execute() 调用后至少 30 秒发生。

我怀疑Java客户端库设置了30秒的内部超时...我希望一些Google软件工程师可以看看。

任何想法都会受到赞赏。非常感谢。

最佳答案

上传大文件时会出现此错误。尝试实现可断点续传。您可以在下页中阅读有关该方法以及示例的更多信息:https://developers.google.com/drive/web/manage-uploads#resumable

基于Java库,您应该在insertRequest.execute()之前添加以下代码

MediaHttpUploader uploader = insert.getMediaHttpUploader();
uploader.setDirectUploadEnabled(useDirectUpload);
uploader.setProgressListener(new FileUploadProgressListener());

关于java - 尝试使用 Java 客户端库将大文本文件插入 Google 云端硬盘时出现超时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30895963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com