繁体   English   中英

将图像上传到S3 Bucket - Java SDK

[英]Uploading Image to S3 Bucket - Java SDK

我正在开发一个连接到我的Tomcat / Jersey服务器的iOS应用程序。

我目前将图像上传到S3的方式是使用以下工作流程:
- 使用POST请求Multipart Form数据将图像上传到我服务器上的临时文件夹
- 从临时文件夹中获取文件并使用Amazon Java SDK将其上传到S3
- 上传完成后,从服务器上的临时文件夹中删除映像文件到S3

我不希望我的iOS应用程序直接上传到S3,因为我想通过我的服务器执行一些操作,但在我看来,这似乎是多余的,并且会使进程变得比它可能需要的慢。 有没有办法直接通过亚马逊SDK流式传输文件,而不必临时将其保存到我的服务器?

谢谢你的建议。 我使用您的答案通过直接通过Amazon SDK上传输入流来解决它,如下所示:

byte[] contents = IOUtils.toByteArray(inputStream);
InputStream stream = new ByteArrayInputStream(contents);

ObjectMetadata meta = new ObjectMetadata();
meta.setContentLength(contents.length);
meta.setContentType("image/png");

s3client.putObject(new PutObjectRequest(
        bucketName, fileName, stream, meta)
        .withCannedAcl(CannedAccessControlList.Private));

inputStream.close();

其中inputStream和iOS应用到我的服务器和接收到的输入流s3clientAmazonS3Client初始化与BasicAWSCredentials

您可以通过使用HttpServletRequest .getInputStream()将输入流保存到数据成员然后将其传递给S3 SDK来获取InputStream: Execute one of the AmazonS3Client.putObject overloads depending on whether you are uploading data from a file, or a stream. 来自亚马逊S3

上传成功完成/出错后,您可以向用户返回相关响应。

如果您需要帮助,请告诉我。

如果您只想保护S3上传后面的某些身份验证机制,您可以在用户通过身份验证后生成预先签名的S3上传URL ,然后您可以使用该URL直接从iOS上传到S3。 这将满足您的身份验证要求,但保持Web服务器上的所有上传流量。

这是一种非常常见的设计模式,允许用户在身份验证后将文件上传到S3。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM