【发布时间】:2019-08-14 00:24:06
【问题描述】:
我正在尝试从 S3 读取一个非常大的文件(几乎 1 GB)。但是 getobject 无法读取文件并出现错误
警告:并非所有字节都从 S3ObjectInputStream 中读取,因此中止 HTTP 连接。这可能是一个错误,并可能导致次优行为。通过远程 GET 仅请求您需要的字节,或在使用后耗尽输入流。
我检查了一些帖子,发现 s3ObjectInputStream.abort() 可能会解决问题。但这仍然没有帮助。
S3Object sourceS3Object = null;
S3ObjectInputStream s3ObjectInputStream=null;
InputStream reader = null;
ObjectMetadata metadata = null;
int retries = 10;
while (retries > 0) {
try {
sourceS3Object = sourceS3Client.getObject(sourceS3Uri.getBucket(), sourceS3Uri.getKey());
s3ObjectInputStream = sourceS3Object.getObjectContent();
reader = new BufferedInputStream(s3ObjectInputStream);
} catch (Exception readingException) {
retries--;
System.out.println(readingException);
System.out.println(readingException.getStackTrace().toString());
readingException.printStackTrace();
if (s3ObjectInputStream != null) {
s3ObjectInputStream.abort();
}
sourceS3Object = sourceS3Client.getObject(sourceS3Uri.getBucket(), sourceS3Uri.getKey());
s3ObjectInputStream = sourceS3Object.getObjectContent();
} finally {
if (retries == 0) {
System.out.println("Out of retries");
}
}
}
对于较小的文件,复制成功,但对于较大的文件,它会给我这个警告
【问题讨论】:
标签: java amazon-web-services amazon-s3 aws-sdk