Me pregunto si hay alguna ramificación en la carga de archivos de aproximadamente 4GB de tamaño a través de una aplicación web usando Django/Python. Recuerdo que en el pasado, las cargas de transmisión con Java era el método preferido, pero ¿todavía lo hace hoy o es perfectamente seguro hacerlo con Django/Python?Carga de archivos de gran tamaño con Python/Django
Respuesta
Django de forma predeterminada, colocará datos de archivos cargados en la memoria si es menor a 2.5MB. Cualquier cosa más grande se escribirá en el directorio /tmp
del servidor y luego se copiará cuando se complete la transferencia. Muchas de las configuraciones de carga de archivos de Django se pueden personalizar, los detalles están disponibles en . También puede personalizar el manejo de archivos y seguramente querrá hacer esto.
Antes de considerar cualquier restricción técnica, cargar archivos tan grandes con el navegador dará al usuario una experiencia muy pobre. No hay comentarios sobre cómo se realiza la transferencia (aunque Google Chrome muestra el estado de carga como un porcentaje) y no hay forma de pausar o reanudar las transferencias.
También es probable que tenga problemas en el servidor. Además del extremadamente largo tiempo que cada hilo se tomará al tratar con los datos transmitidos, tiene el tiempo que le toma al sistema copiar el archivo resultante desde /tmp
a su ubicación correcta.
A menos que tenga mucha confianza en que puede prever cualquier problema que pueda tener el servidor con las cargas, sugeriría que esta es una mala idea. Es bastante difícil encontrar información sobre esto a través de google y parece que hay muchos éxitos que describen problemas con grandes cargas de archivos.
Si bien Django es técnicamente capaz de recibir archivos cargados así de grandes, la escasa experiencia del usuario y las dificultades técnicas hacen que este no sea el mejor enfoque. ¿Ha considerado usar un software dedicado para manejar la transferencia de archivos?
Hola adamnfish, gracias por la respuesta completa. He considerado un servicio por separado, mi único problema es que esta es una aplicación web específica para grupos específicos, que cargarán películas completas que han creado, que pueden ser ~ 4GB, por lo que estoy estableciendo un límite de 4 GB. La idea es que podrán subir estos archivos y estarán vinculados a su cuenta. Pueden tener varios archivos en su cuenta. Soy consciente de la experiencia del usuario y ellos están bien y están de acuerdo con eso, solo tengo que encontrar la mejor manera de hacerlo para que no haya problemas en el servidor – JeffC
Use ['django-chunked-uploads'] (https : //github.com/juliomalegria/django-chunked-upload)!(descargo de responsabilidad: escribí esa biblioteca). – juliomalegria
La última respuesta lo cubre. Rutinariamente pongamos 2,5 MB + (pero por lo general no 4gb)
enlace adamnish es correcta, consulte este fragmento (de su link to django docs) con respecto a escribir el archivo en el disco, en lugar de tener en la memoria en primer lugar:
def handle_uploaded_file(f):
with open('some/file/name.txt', 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
más información sobre los "trozos" llamar: https://docs.djangoproject.com/en/dev/ref/files/uploads/#django.core.files.uploadedfile.UploadedFile.chunks
página incluye cómo configurar el tamaño "trozo", etc.
- 1. Sirviendo archivos de gran tamaño con PHP
- 2. Subir archivos de gran tamaño en .NET
- 3. Transferencia de archivos de gran tamaño con servicios web
- 4. Escribiendo archivos de gran tamaño usando BufferedOutputStream
- 5. Editar archivos xml de gran tamaño
- 6. carga de archivos de validación de tamaño
- 7. vigilante del sistema de archivos y archivos de gran tamaño
- 8. archivos de gran tamaño por escrito con Node.js
- 9. Cómo transferir archivos de gran tamaño con WCF
- 10. Impedir la carga de archivos de gran tamaño en ASP.NET 4.0
- 11. configuración de configuración de git para archivos de gran tamaño
- 12. Tamaño máximo de carga de archivos de Juego marco 2.0
- 13. Computing MD5SUM de archivos de gran tamaño en C#
- 14. Java archivos de gran tamaño S de disco Rendimiento
- 15. SQL FileStream + tienda entidad Marco de archivos de gran tamaño
- 16. almacenamiento de archivos de gran tamaño en el servidor sql
- 17. Encriptación/descifrado de archivos de gran tamaño (.NET)
- 18. Recuperar información de la versión desde archivos de gran tamaño
- 19. ¿Problemas de rendimiento al escribir en archivos de gran tamaño?
- 20. Problemas al cargar archivos de gran tamaño en Amazon S3
- 21. Lectura de archivos de gran tamaño desde el final
- 22. Transmisión de archivos de gran tamaño a ASP.NET MVC
- 23. FSEvents y copia de archivos de gran tamaño
- 24. descarga de archivos de gran tamaño en ColdFusion utilizando CFHTTP
- 25. Cómo calcular el tamaño de porción óptimo para cargar archivos de gran tamaño
- 26. ¿Cómo puedo leer, reemplazar y escribir archivos de gran tamaño?
- 27. Usando python lxml.etree para archivos XML de gran tamaño
- 28. Límite de tamaño de carga de archivos de rieles
- 29. Problema extraño al cargar archivos de gran tamaño
- 30. Subir archivos de gran tamaño (1 GB) -ASP.net
"perfectamente seguro"? Siempre ha sido perfectamente seguro. ¿Qué podría ser "inseguro" al respecto? ¿Qué te preocupa? ¿Qué problemas te gustaría evitar? –
Java o similar (como un complemento del navegador, esa parte es la clave) se ha utilizado para este tipo de cosas en el pasado porque puede dar cuenta de los inicios, las paradas y la reanudación de las transferencias. Cargar 4GB a través de HTTP es una locura (simplemente usando un campo de carga de archivo estándar). Período. –
Chris, ¿Por qué es una locura? ¿Puedes dar más detalles? ¿Puede sugerir una alternativa dado el hecho de que el archivo cargado es relativo a la aplicación web y la cuenta de usuario para que FTP, etc. no sea una solución? – JeffC