2016-05-11 1 views
0

J'ai un fichier image png dans un AWS S3 bucket. J'essaie d'obtenir cette image en utilisant Java SDK. Jusqu'à présent, voici ce que je l'ai fait:Comment convertir S3ObjectInputStream en 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; 
} 

La méthode saveImageToS3 fonctionne exactement comme prévu. Toutefois, la seconde méthode renvoie data:image/png;base64,[[email protected] alors qu'elle aurait dû être Base64 valide.

Qu'est-ce que je fais mal? S'il vous plaît aider.

+0

Eh bien, votre 'encodeBase64URL' la méthode est fausse au moins. Vous semblez faire un 'toString()' sur un 'byte []' dedans (c'est de là que vient le '[B @ 428d24fa')). – Kayaman

+0

J'ai inclus la méthode 'encodeBase64URL'. Oui, il y a un 'toString()' sur le 'byte []'. Qu'est-ce que tu me suggère de faire? – JadeSync

+0

Avez-vous essayé ma réponse? – Kayaman

Répondre

1

Au lieu d'appeler toString() sur le résultat byte[] qui se traduira par le très inutile le format [[email protected], vous devez créer une nouvelle Stringen utilisant les octets renvoyés:

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