2009-11-18 11 views
7

Ein bisschen Hintergrund: Ich baue eine iPhone-App mit einem ergänzenden Server-Backend (geschrieben in Rails oder möglicherweise Sinatra, aber wahrscheinlich nicht relevant für diese Diskussion). Ein Teil der Funktionalität beinhaltet das Hochladen von Bildern vom iPhone auf den Server. Diese werden schließlich in S3 gespeichert. Um die App zu vereinfachen und Bandbreite zu sparen, möchte ich die Bilder direkt vom iPhone auf S3 hochladen und meinen Backend-Server überspringen.Amazon S3 POST-Upload (von iPhone)

Die Verwendung der S3 REST API (in diesem Fall würde ich wahrscheinlich ASIHTTPRequest verwenden) würde bedeuten, den AWS Schlüssel und das Geheimnis in der iPhone App zu speichern, was ich aus Sicherheitsgründen nicht tun möchte.

Aus ähnlichen Gründen möchte ich meinen S3-Bucket nicht öffentlich beschreibbar machen.

Jetzt sieht es so aus, dass S3 auch Unterstützung für browser-based uploads using POST bietet. Wenn ich es richtig verstehe, funktioniert dies, indem ein signiertes Richtliniendokument auf dem Server erzeugt wird, das es der Client-App dann ermöglicht, die Datei direkt an S3 zu senden. Es scheint, dass dies im Prinzip nicht nur für Browser, sondern auch für iPhone-Apps funktionieren sollte.

Allerdings habe ich eine harte Zeit herauszufinden, die genaue Art und Weise, um dies funktioniert (nicht das iPhone spezifische Teil, nur S3 POST-Uploads im Allgemeinen). Welche Informationen müssen an den Server gesendet werden, um die Signatur zu berechnen (benötigt er beispielsweise die Dateigröße oder andere Dateiinformationen)? Ich werde die offiziellen Dokumente noch einmal durchforsten und damit experimentieren, aber wenn mich jemand auf Tutorials oder Beispielcode hinweisen könnte, wäre das sehr zu begrüßen.

Antwort

5

Wenn Sie die Richtlinie generieren, können Sie das hochgeladene Material auf verschiedene Arten einschränken (Schlüsselname, MIME-Typ, Dateigröße usw.), indem Sie eine JSON-Zeichenfolge erstellen. Diese Einschränkungen (einschließlich eines Expirydates) werden dann mit Ihrem AWS-Geheimschlüssel signiert. Anschließend senden Sie die signierte Richtlinie und den Zugriffsschlüssel als Formularparameter an AWS, zusammen mit dem Schlüssel für die neue Ressource, den Inhalt und alle anderen Metadaten, die Sie mögen.

Die offizielle doco ist der einzige Hinweis, den ich kenne (aber ich habe nicht für ihn gegoogelt entweder ...)

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

ist die Seite, die Sie sind wahrscheinlich am meisten interessiert.

+0

Danke für die Erklärung. Ich hatte gehofft, dass es da draußen etwas Tutorial-ähnliches geben könnte, aber im Nachhinein scheint es, als hätte der Amazon-Doc alle notwendigen Informationen, also sollte ich einfach damit anfangen. –

+0

diese URL funktioniert nicht mehr – Deepak