¿Cómo implementaría una funcionalidad de carga de archivos muy grande con una aplicación Django y S3?
En mi trabajo secundario como fotógrafo, tengo varios clientes para los que necesito compartir archivos de varios gigabytes (zip, tar) que contienen los originales y las imágenes procesadas del evento en cuestión. Hasta ahora, hemos estado usando Google Drive para esto, en el que subiría el archivo a GD y lo recuperarían y guardarían en una unidad de almacenamiento local. En ocasiones, limpiaba la carpeta GD, ya que los archivos cargados allí se reflejan en mi computadora a través del cliente Mac Google Drive. Dado que mi Mac solo tiene una unidad integrada de 256 GB, el espacio es muy escaso.
Un cliente ha tenido dos fallas en el disco duro en los últimos cuatro meses, donde hubo cero en los diez años anteriores en que había sido empleado por ellos. Entonces quieren una mejor solución, y ya soy desarrollador, ¿por qué no?
Ahora, la pregunta es si es una buena idea hacer que el navegador sea responsable de la cola y el transporte de un archivo de almacenamiento de más de doce gigabytes a mi servidor, para lo cual pasará por un escaneo de atributos antes de pasar a S3.
Puedo ver dos opciones con esto:
- Use el navegador con un formulario de carga de archivos para cargar un archivo de varias partes en el servidor. Una vez completado, el archivo será revisado y procesado por una tarea local de Celery, y luego cargado en un cubo S3.
- Implemente un comando de administración de Django para activar la ejecución de la tarea local de procesamiento de archivos de Celery, y use un script local de Python usando Paramiko para cargar el archivo y activar la ejecución del comando de administración cuando se complete la carga.
Personalmente, me estoy inclinando hacia la Opción 2, pero quisiera otras ideas si es posible.
fuente
Respuestas:
A través de conversaciones con otros sobre este tema, creo que he reunido una solución:
Para lograr esto, se deberá hacer lo siguiente:
POST
editado a un punto final API RESTfuente