亚马逊S3 POST上传(来自iPhone)

7

背景介绍:我正在开发一款iPhone应用程序,配备有服务器后端(使用Rails或可能是Sinatra编写,但对此讨论可能不重要)。功能的一部分涉及将图片从iPhone上传到服务器。最终,这些图片会存储在S3上,因此为了简化应用程序并节省带宽,我希望能够直接从iPhone上传图片到S3,跳过我的后端服务器。

如果使用S3 REST API(在这种情况下,我很可能会使用ASIHTTPRequest),则意味着在iPhone应用程序中存储AWS密钥和密钥,出于安全原因,我不想这样做。

出于类似的原因,我也不希望使我的S3存储桶公开可写。

现在看起来S3也支持使用POST进行基于浏览器的上传。如果我理解正确,这是通过在服务器上生成签名策略文档来实现的,然后允许客户端应用程序直接将文件POST到S3。它似乎在原则上不仅适用于浏览器,而且也适用于iPhone应用程序。

然而,我很难弄清楚确切的方法来使它工作(不是 iPhone 特定部分,只是 S3 POST 上传一般情况下)。需要发送哪些信息到服务器以计算签名(例如,是否需要文件大小或任何其他文件信息)?我会进一步查阅官方文档并开始尝试。

1个回答

5
当您生成策略时,可以通过构建JSON字符串以各种方式限制上传内容(键名、MIME类型、文件大小等),然后使用AWS秘密密钥对这些限制进行签名,包括到期日期。然后,您将已签名的策略和访问密钥作为表单参数发布到AWS,以及新资源的密钥、其内容和任何其他元数据。

我所知道的唯一参考文献是官方文档(但我也没有搜索它...)

http://docs.amazonwebservices.com/AmazonS3/2006-03-01/dev/HTTPPOSTForms.html#HTTPPOSTConstructPolicy

这可能是你最感兴趣的页面。


谢谢您的解释。我希望能够找到更多类似教程的资料,但回想起来,亚马逊文档似乎已经包含了所有必要的信息,所以我应该开始尝试实验了。 - Mirko Froehlich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接