7

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

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

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

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

但是,我很难弄清楚让它工作的确切方法(不是 iPhone 特定的部分,一般只是 S3 POST 上传)。为了计算签名需要向服务器发送哪些信息(例如,它是否需要文件大小或任何其他文件信息)?我将进一步研究官方文档并开始对此进行试验,但是如果有人可以向我指出一些教程或示例代码,那将不胜感激。

4

1 回答 1

5

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

官方文档是我所知道的唯一参考资料(但我也没有在谷歌上搜索过......)

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

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

于 2009-11-18T07:34:45.270 回答