2017-05-25 12 views
0

次のコードを使用してAWS S3バケットから画像をダウンロードしています。S3バケットから画像をダウンロードした後にコンテンツの配置で画像コンテンツを取得しない

com.amazonaws.services.s3.model.S3Object object = s3Client.getObject(new 
GetObjectRequest(bucketName, mediaItem.getFileName())); 
    S3ObjectInputStream objectData = object.getObjectContent(); 
    object.close(); 
    return objectData.toString(); 

私は200の応答を取得しますが、イメージビューでは画像は表示されません。

+0

実際に私は、バケットS3から画像を取得しながら、私はS3ObjectInputStreamからのjavax.servlet.ServletOutputStreamを設定することができるか知りたいと思いました。助けてください。 – vijay

答えて

0

AWS S3バケットからオブジェクトを取得し、オブジェクトストリームをサーブレットレスポンスに書き込むコードを次に示します。コンテンツの配置を「インライン」として使用しているため、ブラウザ上にオブジェクトが直接表示されます。 「名前を付けて保存」がポップアップしません。要件に応じて異なるコンテンツ処理に変更することができます。

Content disposition

私はS3のクライアントを取得するために、アクセスキーと秘密鍵を使用していました。 S3バケットにアクセスできるEC2からアプリケーションを実行している場合は、InstanceProfileCredentialsProvider(コメント付きコード)に変更できます。

public class GetS3Object extends HttpServlet { 

    private static final long serialVersionUID = -3924600769478978726L; 

    private static Logger logger = Logger.getLogger(GetS3Object.class); 

    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
     this.doGet(req, resp); 
    } 

    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 

     ServletOutputStream out = resp.getOutputStream(); 

     /*AmazonS3 s3Client = AmazonS3ClientBuilder.standard() 
       .withCredentials(new InstanceProfileCredentialsProvider(false)).build();*/ 

     BasicAWSCredentials awsCreds = new BasicAWSCredentials("accesskey", "secretkey"); 
     AmazonS3 s3Client = AmazonS3ClientBuilder.standard() 
           .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) 
           .build(); 

     try { 

      GetObjectRequest getObjectRequest = new GetObjectRequest("yourbucketName", "objectkey"); 
      S3Object s3Object = s3Client.getObject(getObjectRequest); 

      byte[] s3Content = org.apache.commons.io.IOUtils.toByteArray(s3Object.getObjectContent()); 

      resp.setHeader("Content-Type", 
        getServletContext().getMimeType(s3Object.getObjectMetadata().getContentType())); 
      resp.setHeader("Content-Length", String.valueOf(s3Content.length)); 
      resp.setHeader("Content-Disposition", "inline; filename=\"" + "Google_logo.jpeg" + "\""); 

      out.write(s3Content); 

     } catch (Exception e) { 
      e.printStackTrace(); 

     } finally { 
      if (out != null) { 
       out.flush(); 
       out.close(); 
      } 
     } 

    } 

} 
+0

ありがとうございました – vijay

+0

役に立ったと答えていただければ幸いですか?ありがとう! – notionquest

関連する問題