7

少し背景:私は補完的なサーバーバックエンドを備えたiPhoneアプリを構築しています(RailsまたはおそらくSinatraで書かれていますが、おそらくこの議論には関係ありません)。機能の一部には、iPhoneからサーバーへの写真のアップロードが含まれます。これらは最終的にS3に保存されるため、アプリを簡素化し、帯域幅を節約するために、バックエンドサーバーをスキップして、iPhoneからS3に写真を直接アップロードしたいと思います。

S3 REST APIを使用すると(この場合、ASIHTTPRequestを使用する可能性があります)、AWSキーとシークレットをiPhoneアプリに保存することを意味しますが、セキュリティ上の理由からこれは実行したくありません。

同様の理由で、S3バケットを公に書き込み可能にしたくありません。

現在、S3はPOSTを使用したブラウザベースのアップロードもサポートしているようです。私が正しく理解していれば、これはサーバー上に署名されたポリシードキュメントを生成することで機能します。これにより、クライアントアプリはファイルをS3に直接POSTできます。原則として、これはブラウザだけでなくiPhoneアプリでも機能するはずです。

ただし、これを機能させる正確な方法を理解するのに苦労しています(iPhone固有の部分ではなく、一般的にS3 POSTアップロードのみ)。署名を計算するためにサーバーに送信する必要のある情報は何ですか(たとえば、ファイルサイズやその他のファイル情報が必要ですか)。公式ドキュメントをもう少し掘り下げて実験を開始しますが、誰かがチュートリアルやサンプルコードを教えてくれれば、それは大いにありがたいことです。

4

1 に答える 1

5

ポリシーを生成するときに、JSON文字列を作成することにより、さまざまな方法(キー名、mimeタイプ、ファイルサイズなど)でアップロードされるものを制限できます。これらの制限(有効期限を含む)は、AWSシークレットキーを使用して署名されます。次に、署名されたポリシーを投稿し、フォームパラメータとしてキーにアクセスします。新しいリソースのキー、コンテンツ、その他のメタデータも一緒に使用します。

公式のドコは私が知っている唯一のリファレンスです(しかし私もそれをグーグルで検索していません...)

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

おそらく最も興味のあるページです。

于 2009-11-18T07:34:45.270 に答える