将BufferedImage对象作为文件保存到Amazon S3

Abs*_*Abs 19 java amazon-s3

我目前使用以下内容将文件上传到S3:

File file = new File(my_file_path);

AmazonS3 s3 = new AmazonS3Client(new PropertiesCredentials(cred));

s3.putObject(new PutObjectRequest("folder", key, file));
Run Code Online (Sandbox Code Playgroud)

以上工作正常,但我想直接保存BufferedImage到S3从我的应用程序刮几秒,但我不知道如何做到这一点?这就是我目前将图像保存到文件的方式:

image = new BufferedImage(rawImage.width, rawImage.height, BufferedImage.TYPE_INT_ARGB);

File file = new File(filepath); 

ImageIO.write(image, "png", file);
Run Code Online (Sandbox Code Playgroud)

有没有办法直接写入Amazon S3作为流,如果是这样,有人可以展示一个例子吗?

另外,这是个好主意吗?如果它容易出错,我会坚持我现在的方法.任何建议表示赞赏

jkr*_*ill 38

以下(或非常类似的东西)应该可以正常工作.避免写入物理文件的步骤应该比处理磁盘I/O稍微容易出错(至少,随着时间的推移填充磁盘的可能性会降低).

BufferedImage image = ...
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(image, "png", os);
byte[] buffer = os.toByteArray();
InputStream is = new ByteArrayInputStream(buffer);
AmazonS3 s3 = new AmazonS3Client(new PropertiesCredentials(cred));
ObjectMetadata meta = new ObjectMetadata();
meta.setContentLength(buffer.length);
s3.putObject(new PutObjectRequest("folder", key, is, meta));
Run Code Online (Sandbox Code Playgroud)

  • 这很有效,谢谢你jkraybill!我会添加内容类型`meta.setContentType("image/png");`因为当我尝试在AWS S3控制台中打开它时,它不断下载它而不是让我查看图像.正是为了让这个问题的未来读者不要绊倒这个.:) (9认同)