2016-07-29 51 views
0

Amazon S3サーバからファイルを返すにはサーブレットが必要です。サーバーのみがアクセスするための認証情報を持っていますが、S3バケットは公開されていません。私はそれを変えることはできません。私はデータストリームを使うように言われましたが、それはとても遅いです。 テストするために、私はサムネイルを持つ小さなproyectを持っています。あなたが1つをクリックすると、完全なイメージで新しいタブが開きます。 5メガバイトの画像は、読み込むのに約1分かかります。それは遅い。Amazon S3からのサーブレットの読み込みが遅い

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(); 
    } 
} 

答えて

1

回答が見つかりました。問題はロガーでした。私たちはlog4jを使用しており、デバッグするように設定されているので、ストリームのすべてのトレースはコンソールに書き込まれました。 念のために、それは他の誰かに起こり、ここで彼らはそれが生産に避けるべきであると言うのリンクです: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-logging.html#verbose-wire-logging

はまた、saravanakumar vが言ったように私もTransferManagerの使用を開始し、わずかに速いと思われます。例えば

私はデバッグが

2017-05-23 12:06:21,770 Wire (Wire.java:86) DEBUG - http-outgoing-0 << "[0xf0][0x1]BGY[0xb][0x0][0x1]ITY[0xb][0x10][0x1]I" 
2017-05-23 12:06:21,824 Wire (Wire.java:72) DEBUG - http-outgoing-0 << "RY[0xb] [0x1]CHY[0xb]0[0x1]DEY[0xb]@[0x1]KZY[0xb]P[0x1]ITY[0xb]`[0x1]ESY[0xb][0x80][0x1]PLY[0xb][0xa0][0x1]GEY[0xb][0xb0][0x1]TJY[0xb][0xc0][0x1]DEY[0xb][0xd0][0x1]CHY[0xb][0xe0][0x1]CZY[0xc][0x0][0x1]GBY[0xc][0x10][0x1]ESY[0xc] [0x1]RUY[0xc]0[0x1]SKY[0xc]@[0x1]RUY[0xc]P[0x1]UZY[0xc]`[0x1]RUY[0xc]p[0x1]MDY[0xc][0x80][0x1]ITY[0xc][0x90][0x1]GBY[0xc][0xa0][0x1]ITY[0xc][0xc0][0x1]UAY[0xc][0xe0][0x1]SAY[0xc][0xf0][0x1]RUY[\r][0x0][0x1]NOY[\r] [0x1]HUY[\r]0[0x1]FRY[\r]@[0x1]DEY[\r]P[0x1]ESY[\r]`[0x1]HUY[\r]p[0x1]ESY[\r][0x80][0x1]GBY[\r][0xa0][0x1]DEY[\r][0xb0][0x1]ATY[\r][0xc0][0x1]DEY[\r][0xd0][0x1]RUY[\r][0xe0][0x1]SEY[0xe][0x0][0x1]NOY[0xe][0x10][0x1]RUY[0xe] [0x1]ESY[0xe]0[0x1]RUY[0xe]@[0x1]CHY[0xe]P[0x1]NGY[0xe]`[0x1]AZY[0xe]p[0x1]DEY[0xe][0x80][0x1]GBY[0xe][0x90][0x1]DEY[0xe][0xb0][0x1]GBY[0xe][0xc0][0x1]RUY[0xe][0xd0][0x1]HRY[0xe][0xe0][0x1]ATY[0xe][0xf0][0x1]RUY[0xf][0x0][0x1]ATY[0xf][0x10][0x1]RUY[0xf] [0x1]ESY[0xf]0[0x1]RUY[0xf]@[0x1]GBY[0xf]P[0x1]FRY[0xf]`[0x1]MTY[0xf]p[0x1]GBY[0xf][0x80][0x1]RUY[0xf][0xa0][0x1]EUY[0xf][0xb0][0x1]KZY[0xf][0xc0][0x1]RUY[0xf][0xd0][0x1]ITY[0xf][0xe0][0x1]BEY[0xf][0xf0][0x1]SEY[0x10][0x0][0x1]FRY[0x10][0x10][0x1]RUY[0x10] [0x1]BEY[0x10]0[0x1]GBY[0x10]@[0x1]MKY[0x10]`[0x1]DKY[0x10]p[0x1]ATY[0x10][0x80][0x1]RSY[0x10][0x90][0x1]ESY[0x10][0xa0][0x1]DEY[0x10][0xb0][0x1]CZY[0x10][0xc0][0x1]SEY[0x10][0xd0][0x1]GBY[0x10][0xe0][0x1]CYY[0x10][0xf0][0x1]ESY[0x11][0x0][0x1]NOY[0x11][0x10][0x1]DEY[0x11] [0x1]PLY[0x11]0[0x1]BGY[0x11]@[0x1]SEY[0x11]P[0x1]LTY[0x11]`[0x1]RSY[0x11]p[0x1]RUY[0x11][0x80][0x1]NLY[0x11][0x90][0x1]TRY[0x11][0xa0][0x1]RUY[0x11] 
2

TransferManagerのAPIを使用して - http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.htmlは、問題を解決します。

+0

Thxをしていたが、私はそれをしようとすると、作品の場合は、この問題のため答えを承認し、このサンプルの応答で、このIPとcountry.binダウンロードした外観を持っていた;) –

+0

私は休日を過ごしていました。それは問題を解決しませんでした.TransferManagerではわずかに遅くなっています。問題は、それが私が制御できない呼び出しであり、すべてのファイルで一度呼び出され、次の呼び出しを開始するまで待たなければならないということです。そのため、TransferManagerの有用性の大部分は失われます。とにかくThx。 –

関連する問題