一尘不染

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

java

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

File file = new File(my_file_path);

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

s3.putObject(new PutObjectRequest("folder", key, file));

上面的方法工作正常,但我想直接将a保存BufferedImage到S3以从应用程序中删除几秒钟,但是我不知道如何执行此操作?这是我当前将图像保存到文件中的方式:

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

File file = new File(filepath);

ImageIO.write(image, "png", file);

有没有一种方法可以直接以流的形式直接写入Amazon S3,如果可以,有人可以显示示例吗?

另外,这是个好主意吗?如果它容易出错,我将继续使用当前方法。任何建议表示赞赏。


阅读 247

收藏
2020-12-03

共1个答案

一尘不染

以下(或类似的东西)应该可以正常工作。避免写入物理文件的步骤比处理磁盘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));
2020-12-03