2016-05-16 129 views
1

我正在實施幫助程序類來處理來自我的Web應用程序的從AWS S3存儲的傳輸。將文件下載到流而不是文件

在我班的第一個版本中,我直接使用AmazonS3Client來處理上傳和下載,但現在我發現了TransferManager,我想重構我的代碼以使用它。

問題是,在我的下載方法中,我以byte[]的形式返回存儲的文件。 TransferManager改爲只有使用File作爲下載目標的方法(例如download(GetObjectRequest getObjectRequest, File file))。

我以前的代碼是這樣的:

GetObjectRequest getObjectRequest = new GetObjectRequest(bucket, key); 
S3Object s3Object = amazonS3Client.getObject(getObjectRequest); 
S3ObjectInputStream objectInputStream = s3Object.getObjectContent(); 
byte[] bytes = IOUtils.toByteArray(objectInputStream); 

是否有使用TransferManager以同樣的方式,或者我應該簡單地繼續使用AmazonS3Client實例的方式嗎?

+1

將所有字節載入內存不是一個好習慣。考慮返回文件並打開一個輸入流來讀取它,這樣在處理大文件時應用程序不會崩潰。 – andrucz

回答

3

TransferManager使用File對象在並行下載片段時支持文件鎖定等操作。直接使用OutputStream是不可能的。如果您的要求很簡單,比如一次下載S3中的小文件,請堅持使用getObject

否則,您可以使用File.createTempFile創建一個臨時文件,並在下載完成後將內容讀入字節數組中。

+0

謝謝你的解釋。我將使用臨時文件。 – davioooh

相關問題