2009-11-18 201 views
7

有点背景:我正在构建一个补充服务器后端(用Rails或可能Sinatra编写,但可能与本次讨论无关)的iPhone应用程序。部分功能涉及将图片从iPhone上传到服务器。这些最终会存储在S3上,所以为了简化应用并节省带宽,我想直接从iPhone上传图片到S3,跳过我的后端服务器。亚马逊S3 POST上传(来自iPhone)

使用S3 REST API(在这种情况下,我可能会使用ASIHTTPRequest)意味着将AWS密钥和机密存储在iPhone应用程序中,我不想出于安全原因进行操作。

由于类似的原因,我不想让我的S3存储桶公开可写。

现在看起来S3也支持browser-based uploads using POST。如果我理解正确,这可以通过在服务器上生成一个签名的策略文档来工作,然后客户端应用程序可以直接将文件发布到S3。原则上这似乎不仅适用于浏览器,也适用于iPhone应用程序。

但是,我很难弄清楚获得这个工作的确切方式(不是iPhone的特定部分,只是S3 POST上传)。需要将哪些信息发送到服务器以计算签名(例如,是否需要文件大小或任何其他文件信息)?我会更深入地挖掘官方文档,并开始尝试这一点,但如果有人能指点我一些教程或示例代码,那将非常感激。

回答

5

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

官方DOCO是我所知道的唯一的参考(但我没有用Google搜索,要么...)

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

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

+0

感谢您的解释。我希望可能会有更多的教程,但回想起来,它好像亚马逊文档有所有必要的信息,所以我应该开始试验它。 – 2009-11-19 15:14:24

+0

此网址无效 – Deepak 2017-02-07 12:05:46