如何将 S3ObjectInputStream 转换为 Base64url?
How to convert S3ObjectInputStream to Base64 url?
我在 AWS S3 bucket
中有一个 png
图像文件。我正在尝试使用 Java SDK 获取此图像。到目前为止,这是我所做的:
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
方法完全符合预期。但是,第二种方法 returns data:image/png;base64,[B@428d24fa
虽然它应该是有效的 Base64
.
我做错了什么?请帮忙。
与其在生成的 byte[]
上调用 toString()
这将导致非常无用的 [B@428d24fa
格式,不如创建一个新的 String
使用返回的字节:
base64 = "data:image/png;base64," + new String(encoder.encode(bytes), "UTF-8");
我在使用 Base64 encoder = new Base64();
时遇到了一些问题
所以我通过不使用编码器解决了这个问题,并且我在任何地方都用 Base64.getEncoder()
替换了“encoder”。
示例:-
if (img == null) {
base64 = null;
} else {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(img,"PNG",out);
byte bytes[] = out.toByteArray();
base64 = new String(Base64.getEncoder().encode(bytes),"UTF-8");
}
我在 AWS S3 bucket
中有一个 png
图像文件。我正在尝试使用 Java SDK 获取此图像。到目前为止,这是我所做的:
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
方法完全符合预期。但是,第二种方法 returns data:image/png;base64,[B@428d24fa
虽然它应该是有效的 Base64
.
我做错了什么?请帮忙。
与其在生成的 byte[]
上调用 toString()
这将导致非常无用的 [B@428d24fa
格式,不如创建一个新的 String
使用返回的字节:
base64 = "data:image/png;base64," + new String(encoder.encode(bytes), "UTF-8");
我在使用 Base64 encoder = new Base64();
时遇到了一些问题
所以我通过不使用编码器解决了这个问题,并且我在任何地方都用 Base64.getEncoder()
替换了“encoder”。
示例:-
if (img == null) {
base64 = null;
} else {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(img,"PNG",out);
byte bytes[] = out.toByteArray();
base64 = new String(Base64.getEncoder().encode(bytes),"UTF-8");
}