Verificamos profundamente cada una de las noticias en nuestro sitio web con el objetivo de mostrarte siempre información veraz y actualizada.
Solución:
Django colocará de forma predeterminada los datos del archivo cargado en la memoria si tiene menos de 2,5 MB. Cualquier cosa más grande se escribirá en el servidor. /tmp
directorio y luego se copia cuando se completa la transferencia. Muchas de las configuraciones de carga de archivos de Django se pueden personalizar, los detalles están disponibles en la documentación. También puede personalizar el manejo de archivos y seguramente querrá hacerlo.
Antes de considerar cualquier restricción técnica, cargar archivos tan grandes con el navegador le dará al usuario una experiencia muy pobre. No hay comentarios sobre cómo va 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. Aparte del tiempo extremadamente largo que cada subproceso tardará en procesar los datos transmitidos, tiene el tiempo que tarda el sistema en copiar el archivo resultante de /tmp
a su ubicación correcta.
A menos que esté muy seguro de que puede prever cualquier problema que el servidor pueda tener 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 haber muchos resultados que describen problemas con la carga de archivos grandes.
Si bien Django es técnicamente capaz de recibir archivos cargados de este tamaño, la muy mala experiencia del usuario y las dificultades técnicas significan que este puede no ser el mejor enfoque. ¿Ha considerado usar un software dedicado para manejar la transferencia de archivos?
La última respuesta lo cubre. Rutinariamente cargamos 2.5mb+ (pero generalmente no 4gb)
El enlace adamnish es correcto, vea este fragmento (de su enlace a los documentos de Django) con respecto a escribir el archivo en el disco, en lugar de tenerlo primero en la memoria:
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 la llamada “trozos”: https://docs.djangoproject.com/en/dev/ref/files/uploads/#django.core.files.uploadedfile.UploadedFile.chunks
La página incluye cómo configurar el tamaño de “trozo”, etc.
Para futuros lectores: para aumentar el tamaño de archivo máximo permitido con almacenamiento en memoria, configure lo siguiente en su settings.py
:
FILE_UPLOAD_MAX_MEMORY_SIZE = 5242880 # make it 5Mb instead of 2Mb
Por supuesto, esto no te ayudará para 4Gb.
Eres capaz de avalar nuestra labor dejando un comentario o puntuándolo te damos las gracias.