2009-11-18 25 views
7

Un poco de historia: estoy construyendo una aplicación para iPhone con un backend de servidor complementario (escrito en Rails o posiblemente Sinatra, pero probablemente no relevante para esta discusión). Parte de la funcionalidad consiste en cargar imágenes desde el iPhone al servidor. Estos finalmente se almacenan en S3, por lo que para simplificar la aplicación y conservar el ancho de banda, me gustaría subir las imágenes directamente desde el iPhone a S3, saltándome el servidor backend.Subida POST de Amazon S3 (desde iPhone)

Usar la API REST S3 (en cuyo caso probablemente usaría ASIHTTPRequest) significaría almacenar la clave y el secreto AWS en la aplicación iPhone, lo que no quiero hacer por razones de seguridad.

Por razones similares, no quiero hacer que mi cubo S3 se pueda escribir públicamente.

Ahora parece que S3 también tiene soporte para browser-based uploads using POST. Si lo entiendo correctamente, esto funciona al generar un documento de política firmado en el servidor, que luego permite que la aplicación del cliente directamente POST el archivo a S3. Parece que, en principio, esto debería funcionar no solo para los navegadores, sino también para las aplicaciones de iPhone.

Sin embargo, me es difícil descifrar la forma exacta de hacerlo funcionar (no la parte específica del iPhone, solo cargas S3 POST en general). ¿Qué información se debe enviar al servidor para calcular la firma (por ejemplo, si necesita el tamaño del archivo o cualquier otra información del archivo)? Investigaré un poco más los documentos oficiales y comenzaré a experimentar con esto, pero si alguien pudiera indicarme algunos tutoriales o códigos de muestra, sería muy apreciado.

Respuesta

5

Cuando genera la política, puede restringir lo que se carga de varias maneras (nombre de clave, tipo de mimo, tamaño de archivo, etc.) mediante la construcción de una cadena JSON. Estas restricciones (incluida una fecha de caducidad) se firman utilizando su clave secreta de AWS. A continuación, publica la política firmada y accede a la clave como parámetros de formulario para AWS junto con la clave del nuevo recurso, su contenido y cualquier otro metadato que desee.

El mana oficial es la única referencia que conozco (pero no he buscado en Google para que tampoco ...)

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

es la página que está probablemente más interesados.

+0

Gracias por la explicación. Esperaba que hubiera algo más parecido a un tutorial, pero en retrospectiva, parece que el documento de Amazon tiene toda la información necesaria, así que debería comenzar a experimentar con ella. –

+0

esta URL ya no funciona – Deepak