Mi chiedo se ci sono delle ramificazioni nel caricamento di file di circa 4 GB attraverso un'applicazione web che utilizza Django/Python? Ricordo che in passato il caricamento in streaming con Java era il metodo preferito ma lo fa ancora oggi o è perfettamente sicuro farlo con Django/Python?Caricamento di file di grandi dimensioni con Python/Django
risposta
Django per impostazione predefinita metterà in memoria i dati del file caricato se è inferiore a 2,5 MB. Tutto ciò che è più grande verrà scritto nella directory /tmp
del server e quindi copiato al termine del trasferimento. Molte delle impostazioni di caricamento dei file di Django possono essere personalizzate, i dettagli sono disponibili in . Puoi anche personalizzare la gestione dei file e sicuramente vorrai farlo.
Prima di considerare eventuali limitazioni tecniche, il caricamento di file di grandi dimensioni con il browser darà all'utente un'esperienza molto scarsa. Non ci sono feedback su come il trasferimento sta andando (anche se google chrome mostra lo stato del caricamento in percentuale) e non c'è modo di mettere in pausa o riprendere i trasferimenti.
È inoltre possibile che si verifichino problemi sul server. A parte il tempo estremamente lungo in cui ogni thread verrà utilizzato per gestire i dati in streaming, si avrà il tempo necessario affinché il sistema copi il file risultante da /tmp
nella posizione corretta.
A meno che non si sia certi che si possa prevedere qualsiasi problema che il server possa avere con i caricamenti, suggerirei che questa sia una cattiva idea. È piuttosto difficile trovare informazioni su questo tramite google e sembra che ci siano molti accessi che descrivono problemi con upload di file di grandi dimensioni.
Mentre Django è tecnicamente in grado di ricevere file caricati così grandi, l'esperienza utente e le difficoltà tecniche molto povere significano che questo potrebbe non essere l'approccio migliore. Hai pensato di utilizzare un software dedicato per gestire il trasferimento dei file?
ciao adamnfish, grazie per la risposta approfondita. Ho preso in considerazione un servizio separato, il mio unico problema è che questa è un'app web specifica per gruppi specifici, caricheranno tutti i film che hanno creato, che possono essere di circa 4 GB, quindi imposto un limite a 4 GB. L'idea è che saranno in grado di caricare questi file e sarà legato al loro account. Possono avere più file nel loro account. Sono a conoscenza dell'esperienza dell'utente e sono anche loro e stanno bene, ho solo bisogno di capire il modo migliore per farlo, quindi non ci sono problemi con il server – JeffC
Usa ['django-chunked-uploads'] (https : //github.com/juliomalegria/django-chunked-upload)!(disclaimer: ho scritto quella libreria). – juliomalegria
L'ultima risposta lo copre. Noi abitualmente carichiamo 2.5MB + (ma di solito non 4gb)
collegamento adamnish è corretta, vedere questo frammento (dal suo link to django docs) per quanto riguarda la scrittura del file su disco, invece di avere nella memoria prima:
def handle_uploaded_file(f):
with open('some/file/name.txt', 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
maggiori informazioni sui "blocchi" chiamare: https://docs.djangoproject.com/en/dev/ref/files/uploads/#django.core.files.uploadedfile.UploadedFile.chunks
pagina comprende come impostare il formato "chunk", ecc
- 1. Caricamento file di grandi dimensioni con WebSocket
- 2. CodeIgniter Caricamento di file di grandi dimensioni
- 3. PDFbox caricamento di file di grandi dimensioni
- 4. Efficace caricamento di file di grandi dimensioni con Yesod
- 5. Oracle: caricamento di un file xml di grandi dimensioni?
- 6. Caricamento file di Google App Engine di grandi dimensioni
- 7. Timeout durante il caricamento di un file di grandi dimensioni?
- 8. Caricamento di file di grandi dimensioni su asp.net MVC
- 9. ClientAbortException: java.io.IOException durante il caricamento di file di grandi dimensioni
- 10. Caricamento Android di bitmap di grandi dimensioni
- 11. Caricamento file di grandi dimensioni Tomcat 6.0 (> 2 GB)
- 12. Convalida per file di grandi dimensioni al caricamento
- 13. Ripristino connessione su caricamento file di grandi dimensioni
- 14. Caricamenti di file di grandi dimensioni
- 15. File JSON di grandi dimensioni
- 16. Barra di avanzamento durante il caricamento di file di grandi dimensioni con XMLHttpRequest
- 17. Elaborazione di file xlsx di grandi dimensioni
- 18. Elaborazione di file xml di grandi dimensioni
- 19. Caricamento di immagini di grandi dimensioni utilizzando Base64 e JSON
- 20. Come gestire file di dati di grandi dimensioni con GitHub?
- 21. Prestazioni di Windows fsync (FlushFileBuffers) con file di grandi dimensioni
- 22. Excel non apre file di grandi dimensioni
- 23. File di grandi dimensioni e hashing - preoccupazione
- 24. Come organizzare file di grandi dimensioni?
- 25. Timeout di Heroku durante il caricamento di file di grandi dimensioni su s3
- 26. Android: scarica file di grandi dimensioni
- 27. xmlstarlet sel su file di grandi dimensioni
- 28. Supporto file di grandi dimensioni in C++
- 29. Xampp - PHPMyAdmin carica file di grandi dimensioni?
- 30. Leggi file di grandi dimensioni in parallelo?
"perfettamente sicuro"? È sempre stato perfettamente al sicuro. Cosa potrebbe essere "pericoloso" a riguardo? Di cosa sei preoccupato? Quali problemi vorresti evitare? –
Java o simile (come plug-in del browser - quella parte è la chiave) è stato utilizzato per questo tipo di cose in passato perché può quindi tenere conto dell'avvio, degli arresti e dei ripristini dei trasferimenti. Il caricamento di 4 GB su HTTP è folle (semplicemente utilizzando un campo di caricamento file standard). Periodo. –
Chris, perché è folle? Puoi dare maggiori dettagli? Puoi suggerire un'alternativa dato che il file caricato è relativo all'app Web e all'account utente, quindi FTP non è una soluzione. – JeffC