2009-11-18 231 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