Ci sono alcune cose da tenere presente qui - la proprietà CONTENT_LENGTH sarà la lunghezza del contenuto del caricamento di file come segnalato dal browser, ma sfortunatamente molti browser non lo inviano, come indicato nello docs e source.
Come per l'errore TypeError, la prossima cosa da tenere presente è che i caricamenti di file inferiori a 500 KB sono archiviati in memoria come StringIO object, anziché essere spoolati su disco (consultare di nuovo quei documenti), quindi la tua chiamata di statistiche avrà esito negativo.
MAX_CONTENT_LENGTH è il modo corretto per rifiutare i caricamenti di file più grandi di quanto si desideri e, se ne avete bisogno, l'unico modo affidabile per determinare la lunghezza dei dati è di capirlo dopo aver gestito il caricamento - o stat il file dopo che hai .save()
d esso:
request.files['file'].save('/tmp/foo')
size = os.stat('/tmp/foo').st_size
Oppure, se non si utilizza il disco (ad esempio la memorizzazione in un database), contare i byte che hai letto:
blob = request.files['file'].read()
size = len(blob)
Anche se ovviamente stai attento non stai leggendo troppo d ata nella memoria se il MAX_CONTENT_LENGTH è molto grande
Ok, grazie per la risposta – saidozcan
non è meglio http://stackoverflow.com/a/23601025/125507? cerchi solo la fine del file e non stai usando alcuna memoria? – endolith