【发布时间】:2015-09-12 20:05:45
【问题描述】:
我正在尝试使用 TransferManager.upload(String bucket, String key, File file) 从 Android 应用程序将一个中等大小的文件(大约 10 MB)上传到我的 AWS S3 存储桶。
以下代码间歇性工作:
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(...);
mTransfer = new TransferManager(credentialsProvider);
mTransfer.upload("bucket", key, file);
大约一半的时间,这很有效。另一半时间,由于SSLException,上传失败。是否预计上传到 S3 会如此不可靠?我应该在客户端代码中处理重试吗?
06-25 18:27:50.326: I/AmazonHttpClient(10765): Unable to execute HTTP request: Write error: ssl=0xa1ef1c00: I/O error during system call, Connection reset by peer
06-25 18:27:50.326: I/AmazonHttpClient(10765): javax.net.ssl.SSLException: Write error: ssl=0xa1ef1c00: I/O error during system call, Connection reset by peer
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.android.org.conscrypt.NativeCrypto.SSL_write(Native Method)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.android.org.conscrypt.OpenSSLSocketImpl$SSLOutputStream.write(OpenSSLSocketImpl.java:794)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.android.okio.Okio$1.write(Okio.java:73)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.android.okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:116)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.android.okio.RealBufferedSink.write(RealBufferedSink.java:44)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.android.okhttp.internal.http.HttpConnection$FixedLengthSink.write(HttpConnection.java:310)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.android.okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:116)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.android.okio.RealBufferedSink$1.write(RealBufferedSink.java:131)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.amazonaws.http.UrlHttpClient.write(UrlHttpClient.java:172)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.amazonaws.http.UrlHttpClient.writeContentToConnection(UrlHttpClient.java:129)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.amazonaws.http.UrlHttpClient.execute(UrlHttpClient.java:65)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:353)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:196)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4234)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1644)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.amazonaws.mobileconnectors.s3.transfermanager.internal.UploadCallable.uploadInOneChunk(UploadCallable.java:134)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.amazonaws.mobileconnectors.s3.transfermanager.internal.UploadCallable.call(UploadCallable.java:126)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.amazonaws.mobileconnectors.s3.transfermanager.internal.UploadMonitor.upload(UploadMonitor.java:182)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.amazonaws.mobileconnectors.s3.transfermanager.internal.UploadMonitor.call(UploadMonitor.java:140)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at com.amazonaws.mobileconnectors.s3.transfermanager.internal.UploadMonitor.call(UploadMonitor.java:54)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-25 18:27:50.326: I/AmazonHttpClient(10765): at java.lang.Thread.run(Thread.java:818)
【问题讨论】:
标签: java android amazon-web-services amazon-s3