簡體   English   中英

從Amazon S3中按部分下載大文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM