Как проверить, что файл полностью загружен из POST в Python CGI? - PullRequest
0 голосов
/ 10 апреля 2019

Как мы можем убедиться, что файл полностью загружен на сервер через загрузку?В документации Python CGI для 3.7 указано, что атрибут done будет установлен в -1 в случае возникновения ошибки, такой как загрузка прервана или отменена.Я запутался в том, как убедиться, что весь файл был загружен, прежде чем пытаться сохранить его как LARGEBLOB в базе данных MySQL веб-сайтов.

Как проверить, что файл был полностью загружен при обеспечении done не равно -1 (загрузка была прервана или не может быть завершена)?

Я думаю, что это как-то связано с атрибутом done, поэтому это имя, но как заставить Python ждать, покафайл загружен?Документация, касающаяся CGI для моей версии python, на самом деле не расширяла поведение done.

Я думал, что все данные POST будут загружены до того, как скрипт Python будет выполнен.Но при загрузке файлов я не знаю, так ли это.

Эти файлы могут иметь размер почти 2 гигабайта, поэтому я хочу потратить на обработку их на сервере как можно меньше времени.в сторону, насколько это возможно, и избегайте интенсивной обработки ЦП.

Документация гласит:

Если поле представляет загруженный файл, доступ к значению через атрибут value или метод getvalue () читаетвесь файл в памяти в байтах.Это может быть не то, что вы хотите.Вы можете проверить загруженный файл, протестировав либо атрибут имени файла, либо атрибут файла.Затем вы можете прочитать данные из атрибута файла, прежде чем он будет автоматически закрыт как часть сборки мусора экземпляра FieldStorage (методы read () и readline () будут возвращать байты)

Итак,если бы я сделал:

...

fileitem = form['myfile']
if fileitem.file:
    print("<p> The file has been uploaded completely and successfully </p>")
else:
    print("<p> The file wasn't uploaded successfully</p>")

...

Но тогда где атрибут done входит в картинку, если я могу просто проверить атрибут file?

В документации они делают этокод:

fileitem = form["userfile"]
if fileitem.file:
    # It's an uploaded file; count lines
    linecount = 0
    while True:
        line = fileitem.file.readline()
        if not line: break
        linecount = linecount + 1

Зачем читать файл построчно?В моем случае я не хочу записывать данные файла из POST в файл на сервере, а записывать их непосредственно из памяти в базу данных.

Если я только что сделал fileitem.file.read() иfileitem.file is True тогда нужно ли мне даже проверять, является ли done -1, если атрибут file равен True, как в документации сказано проверять загруженный файл?

Другими словами,если пользователь отменит загрузку, не будет ли fileitem.file просто False?Разве done не будет полностью лишним?

...