【发布时间】:2020-09-14 16:35:15
【问题描述】:
我调试了代码,我得到的错误是在obj.close() 语句之后。我只需要 S3 对象的最后修改日期。
AmazonS3 s3 = AmazonS3ClientBuilder
.standard()
.withCredentials(new DefaultAWSCredentialsProviderChain())
.withRegion(Regions.US_EAST_1)
.build();
S3Object obj = null;
try {
obj = s3.getObject("bucketName","abc/1.txt");
obj.getObjectContent();
Date date = obj.getObjectMetadata().getLastModified();
System.out.println(date);
}finally {
if(obj!=null) {
obj.close();
}
}
错误:
org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 12; received: 0
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:180)
at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:200)
at org.apache.http.impl.io.ContentLengthInputStream.close(ContentLengthInputStream.java:103)
at org.apache.http.impl.execchain.ResponseEntityProxy.streamClosed(ResponseEntityProxy.java:140)
at org.apache.http.conn.EofSensorInputStream.checkClose(EofSensorInputStream.java:228)
at org.apache.http.conn.EofSensorInputStream.close(EofSensorInputStream.java:174)
at com.amazonaws.internal.SdkFilterInputStream.close(SdkFilterInputStream.java:99)
at com.amazonaws.event.ProgressInputStream.close(ProgressInputStream.java:211)
at com.amazonaws.util.IOUtils.closeQuietly(IOUtils.java:70)
at com.amazonaws.services.s3.internal.S3AbortableInputStream.close(S3AbortableInputStream.java:185)
at com.amazonaws.internal.SdkFilterInputStream.close(SdkFilterInputStream.java:99)
at com.amazonaws.services.s3.model.S3ObjectInputStream.close(S3ObjectInputStream.java:136)
at com.amazonaws.internal.SdkFilterInputStream.close(SdkFilterInputStream.java:99)
at com.amazonaws.internal.SdkFilterInputStream.close(SdkFilterInputStream.java:99)
at com.amazonaws.event.ProgressInputStream.close(ProgressInputStream.java:211)
at java.base/java.io.FilterInputStream.close(FilterInputStream.java:180)
at com.amazonaws.internal.SdkFilterInputStream.close(SdkFilterInputStream.java:99)
at com.amazonaws.services.s3.model.S3ObjectInputStream.close(S3ObjectInputStream.java:136)
at com.amazonaws.services.s3.model.S3Object.close(S3Object.java:225)
【问题讨论】:
-
这也是我日志的一部分:[main] WARN com.amazonaws.services.s3.internal.S3AbortableInputStream - 并非所有字节都从 S3ObjectInputStream 中读取,因此中止 HTTP 连接。这很可能是一个错误,并可能导致次优行为。仅通过远程 GET 请求您需要的字节,或在使用后排空输入流。 21:25:38.161 [main] 调试 org.apache.http.impl.execchain.MainClientExec - 取消请求执行
-
这种情况有时会发生还是总是会发生?你当时有网络连接吗?
-
它总是会发生,是的,网络连接在那里
-
文件有多大?
-
其实很小,大约 12 个字节
标签: java amazon-web-services amazon-s3