Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将BuffereImage对象作为文件保存到Amazon S3_Java_Amazon S3 - Fatal编程技术网

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

Java 将BuffereImage对象作为文件保存到Amazon S3,java,amazon-s3,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)); 上面的方法很好,但我想直接将一个缓冲区图像保存到S3,以便从我的应用程序中节省几秒钟,但我不知道如何做到这一点?这是我当前将图像保存到文

我目前使用以下方法将文件上载到S3:

File file = new File(my_file_path);

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

s3.putObject(new PutObjectRequest("folder", key, file));
上面的方法很好,但我想直接将一个
缓冲区图像
保存到S3,以便从我的应用程序中节省几秒钟,但我不知道如何做到这一点?这是我当前将图像保存到文件的方式:

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

File file = new File(filepath); 

ImageIO.write(image, "png", file);
有没有一种方法可以将AmazonS3作为流直接写入,如果有,有人能举个例子吗

另外,这是个好主意吗?如果它容易出错,我将坚持我目前的方法。感谢您的建议。

以下(或非常类似的内容)应该可以。与处理磁盘I/O相比,避免写入物理文件的步骤应该更不容易出错(至少,随着时间的推移,磁盘被填满的可能性会降低)


我强烈建议在AWS SDK中使用TransferManager API。你可以在网站上了解更多。以下是关于其优点的一个片段:

在这个简单的API背后,TransferManager为您做了很多工作。根据上传的大小和数据源,TransferManager会调整用于处理传输的算法,以获得最佳性能和可靠性。只要有可能,上传就被分成多个部分,这样就可以并行发送多个部分,以提供更好的吞吐量。除了更高的吞吐量,这种方法还支持更健壮的传输,因为任何单个数据块中的I/O错误意味着SDK只需要重新传输一个受影响的数据块,而不需要重新传输整个传输


这很有效,谢谢你,比尔!我会添加内容类型
meta.setContentType(“image/png”)当我试图在AWS S3控制台中打开它时,它一直在下载它,而不是让我查看图像。只是为了让这个问题的未来读者不会被这个问题绊倒。:)你们知道为什么当我试图通过浏览器访问而不是在浏览器上看到下载的图像时,我从URL读取一个图像作为输入流,然后上传到S3吗?@franzmobile-你为图像设置了错误的内容类型,或者没有设置内容类型。请参阅上面的“Abs”注释,了解应该修复它的类型。@FranciscoSouza您面临的问题主要是因为“内容处置”响应头,如果您在创建签名URL时将其设置为“内联”,则会得到八位字节流,而使用它可以直接预览
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));