У меня есть файл изображения png
в AWS S3 bucket
. Я пытаюсь получить это изображение с помощью 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
работает точно так же, как и ожидалось. Однако второй метод возвращает data:image/png;base64,[[email protected]
, тогда как он должен был быть действительным Base64
.
Что я делаю неправильно? Пожалуйста помоги.
Ну, ваш 'encodeBase64URL' метод, по крайней мере, неправильный. Кажется, вы делаете 'toString()' на 'byte []' в нем (это происходит от '[B @ 428d24fa'). – Kayaman
Я включил метод encodeBase64URL. Да, есть 'toString()' на 'byte []'. Что вы предлагаете мне делать? – JadeSync
Вы попробовали мой ответ? – Kayaman