[英]Download big file by parts from Amazon S3
我想將大文件從Amazon S3下載到RAM。 文件大於RAM大小。 似乎,我需要按部分加載它。 每個部分都將在端點中返回。 另外我不能使用硬盤驅動器,將下載的文件存儲在那里。 我有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;
但是該代碼包含問題:每個新請求都會從頭開始下載文件,因此最后一個下載請求(例如20 MB)將下載所有文件(例如1 GB)。 因此,方法skip(long)
無法正常工作。
如何從部分從inputStream
下載文件? 有什么建議么?
標准的S3庫可以傳輸所需文件的任何部分:
(摘自AWS文檔 )
GetObjectRequest rangeObjectRequest = new GetObjectRequest(
bucketName, key);
rangeObjectRequest.setRange(0, 10); // retrieve 1st 11 bytes.
S3Object objectPortion = s3Client.getObject(rangeObjectRequest);
InputStream objectData = objectPortion.getObjectContent();
例如,在您的程序中,通過移動范圍可以一次讀取1000個字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.