python django heroku amazon-s3 large-files

python - boto3 django



Cargar archivos grandes en AWS S3 Bucket con Django en Heroku sin solicitud de tiempo de espera 30s (2)

Tengo una aplicación django que permite a los usuarios subir videos. Está alojado en Heroku y los archivos cargados almacenados en un Bucket S3. Estoy usando JavaScript para cargar directamente los archivos en S3 después de obtener una solicitud de la aplicación Django. Esto se debe al tiempo de espera de solicitud de Heroku 30s. ¿Hay alguna posibilidad de que pueda subir archivos de gran tamaño a través del back-end de Django sin utilizar JavaScript y poniendo en peligro la experiencia del usuario?


Debe considerar algunos de los puntos a continuación para la solución de su problema.

  • Por qué tus archivos no deberían llegar a tu django-server y luego ve a s3: enviar los archivos al servidor django y luego enviarlos a s3 es solo una pérdida de potencia computacional y ancho de banda. El siguiente inconveniente sería por qué enviar archivos al servidor django cuando puede enviarlos directamente a su almacenamiento s3.
  • ¿Cómo puede cargar archivos en s3 sin comprometer el UX? El envío de archivos al servidor django no es una opción, por lo que debe manejar esto en su interfaz. Pero el lado frontal tiene su propia limitación, como memoria limitada. No podrá manejar archivos muy grandes porque todo se carga en la RAM y el navegador eventualmente se quedará sin memoria si es un archivo muy grande. Sugeriría que uses algo como dropzone.js . No resolverá el problema de la memoria, pero ciertamente puede proporcionar una buena experiencia de usuario al usuario, como barras de progreso, cantidad de archivos, etc.

Los puntos en la otra respuesta son válidos. La respuesta corta a la pregunta "¿Existe alguna posibilidad de que pueda subir archivos de gran tamaño a través del servidor de Django sin usar JavaScript?" No es "sin cambiar de Heroku".

Tenga en cuenta que cualquier dato transmitido a su dynos pasa por la malla de enrutamiento de Heroku, que es lo que impone el límite de solicitud de 30 segundos para conservar sus propios recursos finitos. Las transacciones de larga duración de cualquier tipo consumen ancho de banda / cálculo / etc. que podrían usarse para atender otras solicitudes, por lo que Heroku aplica el límite para ayudar a que las cosas se muevan entre los miles de dineros. Al cargar un archivo, primero estará limitado por el ancho de banda del cliente a su servidor. Entonces, estará limitado por el ancho de banda entre sus dynos y S3, además de cualquier procesamiento que su dyno realmente haga.

Cuanto más grande sea el archivo, más probable será que la transmisión de datos exceda el tiempo de espera de 30 segundos, particularmente en el paso 1 para clientes en redes no confiables. Crear una ruta directa desde el cliente a S3 es un compromiso razonable.