Sho*_*eki 9 java amazon-s3 amazon-web-services
我正在尝试使用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()));
Run Code Online (Sandbox Code Playgroud)
当我在评论前两行并取消注释第三行(即streama)后运行代码时FileoutputStream,文件正确上传.但是,如果data是base64编码的字符串,即图像数据,则会上载文件但图像已损坏.亚马逊文档说我需要创建并附加POST策略和签名才能使用.我怎么能在java中做到这一点?我没有使用html表单进行上传.
小智 16
首先你应该从字符串的开头删除数据: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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7523 次 |
| 最近记录: |