Java 从AmazonS3下载大文件
我想把大文件从AmazonS3下载到RAM中。文件比RAM大。看来,我需要按零件装载。每个部分都将在端点中返回。 我也不能用硬盘,把下载的文件存储在那里。 我有Java 从AmazonS3下载大文件,java,amazon-s3,inputstream,Java,Amazon S3,Inputstream,我想把大文件从AmazonS3下载到RAM中。文件比RAM大。看来,我需要按零件装载。每个部分都将在端点中返回。 我也不能用硬盘,把下载的文件存储在那里。 我有InputStream对象,我正在尝试加载对象,如下所示: inputStream.skip(totalBytes); long downloadedBytesCount = 0; ByteArrayOutputStream result = new ByteArrayOutputStream(); byt
InputStream
对象,我正在尝试加载对象,如下所示:
inputStream.skip(totalBytes);
long downloadedBytesCount = 0;
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
do {
length = inputStream.read(buffer);
result.write(buffer, 0, length);
downloadedBytesCount += length;
}
while (downloadedBytesCount <= partOfFileSize && (length != -1));
totalBytes += downloadedBytesCount;
inputStream.skip(总字节);
长下载字节数=0;
ByteArrayOutputStream结果=新建ByteArrayOutputStream();
字节[]缓冲区=新字节[1024];
整数长度;
做{
长度=inputStream.read(缓冲区);
结果.写入(缓冲区,0,长度);
下载字节数+=长度;
}
而(downloadedBytesCount标准S3库可以传输您想要的文件的任何部分:
(摘自)
例如,在您的程序中,您可以通过移动范围一次读取1000字节。据我所知,inputStream不适用于此,因为它不能有多个源。
GetObjectRequest rangeObjectRequest = new GetObjectRequest(
bucketName, key);
rangeObjectRequest.setRange(0, 10); // retrieve 1st 11 bytes.
S3Object objectPortion = s3Client.getObject(rangeObjectRequest);
InputStream objectData = objectPortion.getObjectContent();