Opciones para manejar grandes cargas de archivos (de varios gigabytes)

8

¿Cómo implementaría una funcionalidad de carga de archivos muy grande con una aplicación Django y S3?

En mi trabajo paralelo como fotógrafo, tengo varios clientes para los que tengo la necesidad de compartir archivos de varios gigabytes (zip, tar) que contienen los originales, así como las imágenes procesadas del evento en cuestión. Hasta ahora, hemos estado usando Google Drive para esto, en el cual subía el archivo a GD y ellos lo recuperaban y guardaban en una unidad de almacenamiento local. En ocasiones, limpiaba la carpeta GD, ya que los archivos cargados allí están reflejados 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 importante.

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 los que había trabajado. Así que quieren una mejor solución, y yo ya soy un desarrollador, ¿por qué no?

Ahora, la pregunta es si es una buena idea que el navegador sea responsable de la puesta en cola y el transporte de un archivo de más de doce gigabytes a mi servidor, para el cual pasará por un escaneo de atributos antes de moverlo. a S3.

Puedo ver dos opciones con esto:

  1. Use el navegador con un formulario de carga de archivos para cargar un archivo de varias partes en el servidor. Una vez finalizado, el archivo será revisado y procesado por una tarea de apio local, y luego se cargará en un depósito de S3.
  2. Implemente un comando de administración de Django para desencadenar la ejecución de la tarea Celery de procesamiento de archivos local, y use un script Python local usando Paramiko para cargar el archivo y desencadenar la ejecución del comando de administración cuando se complete la carga.

Personalmente, me inclino por la Opción 2, pero me gustaría tener otras ideas si es posible.

    
pregunta Jason 19.02.2017 - 16:14

1 respuesta

2

A través de conversaciones con otros sobre este tema, creo que he reunido una solución:

  1. Suba el archivo comprimido a S3
  2. La acción de carga devuelve un ID de S3, que puede enviarse a un punto final de API
  3. El servidor recupera el archivo y lo pasa a la tarea de apio para su procesamiento.
  4. OPCIONAL : el correo electrónico se envía al usuario / grupo para el que

Para lograr esto, se deberá hacer lo siguiente:

  1. Escriba un script en Python para usar Carga múltiple de Boto3
  2. La llamada al método Boto3 devolverá una referencia al objeto, que luego puede ser POST ed a un punto final de REST API
  3. El servidor recupera el archivo casi inmediatamente a través de una conexión de fibra rápida y comienza un trabajo asíncrono para procesar la hora.
respondido por el Jason 22.02.2017 - 12:19

Lea otras preguntas en las etiquetas