我正在使用Java Drive API的Java客戶端庫上傳一些文本文件並將它們轉換爲Google文檔格式。該代碼在Google App Engine上運行。主要代碼段如下所示:嘗試使用Java客戶端庫向Google Drive插入大文本文件時出現超時異常
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)
有些人說這是由於URLConnnection的超時。但是我正在使用Java客戶端庫,它不允許我明確設置超時。此外,上述例外發生在insertRequest.execute()
呼叫後至少30秒。
我懷疑Java客戶端庫已經設置了30秒的內部超時...我希望一些Google軟件工程師可以看一看。
任何想法將不勝感激。非常感謝。
謝謝您建議@裏維羅。但是,切換到可恢復上傳後,我仍然保持不變。 – derren
但是,在刪除'setConvert(true)'後,超時錯誤消失了。我認爲轉換佔用了大部分時間,這是導致超時錯誤的罪魁禍首。無論如何,再次感謝。 – derren