使用Java将Base64编码的图像上传到Amazon s3

Shoreki:

我正在尝试使用Amazon的Java API将文件上传到Amazon S3存储。该代码是

Byte[] b = data.getBytes();
InputStream stream  = new ByteArrayInputStream(b);
//InputStream stream = new FileInputStream(new File("D:/samples/test.txt"));
AWSCredentials credentials = new BasicAWSCredentials("<key>", "<key1>");
AmazonS3 s3client = new AmazonS3Client(credentials);
s3client.putObject(new PutObjectRequest("myBucket",name,stream, new ObjectMetadata()));

当我在注释前两行并取消注释第三行(即stream是)后运行代码时FileoutputStream,文件已正确上传。但是,当data使用base64编码的String(它是图像数据)时,会上传文件,但是图像已损坏。亚马逊文档说,我需要创建并附加一个POST策略和签名才能使它起作用。我如何在Java中做到这一点?我没有使用html表格上传。

Alper Tunaboylu:

首先,您应该从字符串的开头删除data:image / png; base64:

示例代码块

byte[] bI = org.apache.commons.codec.binary.Base64.decodeBase64((base64Data.substring(base64Data.indexOf(",")+1)).getBytes());

InputStream fis = new ByteArrayInputStream(bI);

AmazonS3 s3 = new AmazonS3Client();
Region usWest02 = Region.getRegion(Regions.US_WEST_2);
s3.setRegion(usWest02);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(bI.length);
metadata.setContentType("image/png");
metadata.setCacheControl("public, max-age=31536000");
s3.putObject(BUCKET_NAME, filename, fis, metadata);
s3.setObjectAcl(BUCKET_NAME, filename, CannedAccessControlList.PublicRead);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章