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.
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
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
Avez-vous essayé ma réponse? – Kayaman