¿Cómo transmitir un archivo desde S3 al navegador?

En mi aplicación, estoy usando Zend_Service_Amazon_S3 para almacenar algunos archivos multimedia grandes. Cuando un usuario descarga un archivo, la aplicación primero copia el archivo al servidor local y desde allí el archivo, junto con algunos encabezados para forzar la descarga del archivo, se envía al navegador.

¿Hay alguna forma de permitir que Amazon transmita el archivo directamente al navegador sin tener que copiar todo el archivo al servidor local? Idealmente, la aplicación aún puede elegir el nombre del archivo descargado forzosamente (que en muchos casos no es el mismo que el archivo en Amazon).

preguntado el 08 de noviembre de 11 a las 16:11

1 Respuestas

Una solución es utilizar un servidor proxy inverso que transmita la solicitud a Amazon S3, pero también reescribe los encabezados de respuesta para cambiar el nombre del archivo y forzar la descarga.

Esto eliminará la necesidad de realizar una copia local de ese archivo, pero la transferencia de datos real seguirá pasando por su servidor.

Sugiero buscar en Nginx para esto y más específicamente en el proxy_pass y add_header opciones de configuración.


Otra solución sería hacer una copia temporal del archivo en S3 (usando la llamada de copia del objeto PUT para que no necesite transferirlo a su servidor) y luego establecer los encabezados Content-Type y Content-Disposition en este objeto en forzar la descarga.

Luego, puede transmitir estos archivos directamente desde S3 al navegador del cliente, pero deberá limpiarlos regularmente en S3, ya que no se eliminarán automáticamente cuando se complete la descarga.

respondido 09 nov., 11:10

Gracias. Configuré los encabezados Content-Type y Content-Disposition en el objeto y luego usé el enlace de Amazon para permitir que un usuario descargue el archivo directamente desde Amazon. murze

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.