我需要一個servlet從Amazon S3服務器返回文件。只有服務器具有訪問憑據,S3存儲桶不公開。我無法改變這一點。我被告知要使用數據流,但速度很慢。 爲了測試,我有一個縮略圖的小項目,當你點擊它時,它會打開一個帶有完整圖像的新選項卡。 5mb圖像大約需要一分鐘才能加載。那很慢。從亞馬遜S3讀取的Servlet太慢了
從S3讀取並返回該數據流的功能:
public void downloadDirectlyFromS3(String s3Path, String fileName, HttpServletResponse response) {
AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
s3Client.setEndpoint(S3ENDPOINT);
S3Object s3object = s3Client.getObject(new GetObjectRequest(s3Path, fileName));
byte[] buffer = new byte[5 * 1024 * 1024];
try {
InputStream input = s3object.getObjectContent();
ServletOutputStream output = response.getOutputStream();
for (int length = 0; (length = input.read(buffer)) > 0;) {
output.write(buffer, 0, length);
}
output.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
THX,我會嘗試一下,如果批准的回答這個問題的作品;) –
我一直在度假,很抱歉花了這麼長時間來回答。它沒有解決問題,使用TransferManager的速度更慢。問題是這是一個我無法控制的調用,它必須在每個文件中調用一次,然後等待該調用完成以開始下一個調用,因此TransferManager的大部分實用性都會丟失。無論如何。 –