Cómo implementar un sistema de carga usando AngularJs y Django Rest Framework

Para cargar archivos desde angular, puede usar cualquiera de

  • nervgh / angular-file-upload
  • danialfarid / ng-file-upload
  • Demostración de carga de archivos jQuery (tiene enlaces angulares)
  • o muchos otros disponibles

Y en el lado de Django-Rest-framework, puede usar MultipartParser o FileuploadParser. La documentación está disponible en Parsers – Django REST framework.

Pero, usar Python para manejar File Upload es una mala idea, según el rendimiento y la memoria. Por el contrario, si Nginx está en su pila, puede dirigir el procesamiento de carga de archivos únicamente en Nginx y Nginx llamará a su punto final (como se define en la configuración) con Ruta al archivo de carga temporal. Una vez que reciba la llamada en Python, valide el archivo si es necesario, muévalo a su directorio de carga y aplique cualquier procesamiento posterior que necesite (lea aquí, estableciendo geek cred desde 1305712800).

Otra forma sería cargar a S3 y luego pasar la clave del archivo al punto final de descanso para su procesamiento.

Mi experiencia: he visto que el rendimiento del servidor se volvió realmente malo en Java (que es bastante más rápido que Python en muchos escenarios) donde la carga se manejó directamente. Entonces, para mi próximo proyecto, manejé toda la carga a través de Nginx y luego el procesamiento con Pyramid, que nunca tuvo ningún cuello de botella que el propio ancho de banda del servidor. Entonces, en mi implementación, uno o más archivos se cargan a través de Angular (BlueImp jQuery File Upload) al servidor en un punto final, donde Pyramid almacena la clave de referencia y la información necesaria en la base de datos, pone en cola la tarea para el procesamiento posterior de ese archivo y devuelve la clave a angular. Luego, Angular publica el formulario con solo una matriz de claves de archivo.

Puede cargar directamente a S3 usando asafdav / ng-s3upload y luego pasar la URL que ng-s3upload le da a su punto final Django ReST.