![](/img/trans.png)
[英]PermanentRedirect error while uploading to S3 bucket with aws-sdk-java
[英]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应用到我的服务器和接收到的输入流s3client
是AmazonS3Client
初始化与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.