2016-05-11 19 views
0

私はにpngイメージファイルを持っています。私はこのイメージをJava SDKを使用して取得しようとしています。これまでのところ、ここで私がやっていることです:S3ObjectInputStreamをBase64のURLに変換するには?

public String encodeBase64URL(BufferedImage imgBuf) throws IOException { 
    String base64; 

    if (imgBuf == null) { 
     base64 = null; 
    } else { 
     Base64 encoder = new Base64(); 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 

     ImageIO.write(imgBuf, "PNG", out); 

     byte[] bytes = out.toByteArray(); 
     base64 = "data:image/png;base64," + encoder.encode(bytes) 
       .toString(); 
    } 

    return base64; 
} 

public String saveImageToS3(BufferedImage imgBuf, String id) throws IOException { 
    AmazonS3 s3 = new AmazonS3Client(); 

    File file = File.createTempFile(id, ".png"); 
    file.deleteOnExit(); 

    ImageIO.write(imgBuf, "png", file); 

    s3.putObject(new PutObjectRequest(bucketName, id, file)); 
    file.delete(); 

    return bucketName; 
} 

public String downloadImageFromS3(String id) throws IOException { 
    AmazonS3 s3 = new AmazonS3Client(); 

    S3Object obj = s3.getObject(new GetObjectRequest(bucketName, id)); 
    BufferedImage imgBuf = ImageIO.read(obj.getObjectContent()); 

    String base64 = encodeBase64URL(imgBuf); 
    return base64; 
} 

saveImageToS3方法が期待どおりに動作します。ただし、2番目のメソッドはBase64であったはずですが、data:image/png;base64,[[email protected]を返します。

私は間違っていますか?助けてください。

+0

を、あなたの 'encodeBase64URL'方法は間違っています。あなたは '(B @ 428d24fa'が出てくる)' byte [] 'の' toString() 'をやっているようです。 – Kayaman

+0

私は 'encodeBase64URL'メソッドを含んでいました。はい、 'toString()'が 'byte []'にあります。私は何をお勧めしますか? – JadeSync

+0

あなたは私の答えを試しましたか? – Kayaman

答えて

1

代わりに非常に助けにならない[[email protected]形式になりますどの結果byte[]toString()を呼び出す、あなたが返されたバイトを使用して新しいStringを作成する必要があります。まあ

base64 = "data:image/png;base64," + new String(encoder.encode(bytes), "UTF-8");

関連する問題