Istnieje kilka rzeczy, aby mieć świadomość tutaj - własność CONTENT_LENGTH będzie długość treść Prześlij plik jako zgłaszane przez przeglądarkę, ale niestety wiele przeglądarek nie wysyła tego, jak odnotowano w docs i source.
Co do Twojego TypeError, następnym krokiem jest to, że pliki przesłane poniżej 500 KB są przechowywane w pamięci jako StringIO object, a nie buforowane na dysku (zobacz te dokumenty ponownie), więc twoje wywołanie statystyk nie powiedzie się.
MAX_CONTENT_LENGTH to poprawny sposób odrzucania przesyłania plików większych niż jest to potrzebne, a jeśli jest to potrzebne, jedynym niezawodnym sposobem określenia długości danych jest wykrycie tego po obsłużeniu przesłania - albo stat plik po .save()
D to:
request.files['file'].save('/tmp/foo')
size = os.stat('/tmp/foo').st_size
Lub jeśli nie używasz dysku (na przykład przechowywanie go w bazie danych), policz bajty czytałeś:
blob = request.files['file'].read()
size = len(blob)
Chociaż oczywiście uważaj, nie czytaj za dużo d ATA do pamięci, jeśli MAX_CONTENT_LENGTH jest bardzo duża
OK dziękuję za odpowiedź – saidozcan
nie jest http://stackoverflow.com/a/23601025/125507 lepszy? po prostu szukaj do końca pliku i nie korzystasz z pamięci? – endolith