Flask Загрузка файла - получение только частичного файла - PullRequest
8 голосов
/ 17 июня 2020

Я пытаюсь загрузить в свое приложение файл CSV размером 60 МБ. Но когда я сохраняю файл на сервере, он содержит только часть (25 МБ) общих записей из оригинала. Эта проблема возникает случайно.

@fileupload.route('/loadfile',methods = ['POST'])
def store_to_db():
for _file in request.files.getlist('filelist'):
        name, ext = FileUtil.get_filename_without_ext(_file.filename)#fetching file name and extension
        fd, path = tempfile.mkstemp(suffix=ext, prefix=name)#saving file as temp
        os.write(fd, _file.read())
        try:
            file_upload_service.savefiletodb(path)
        except Exception as e:
            logger.info(str(e))
        os.close(fd)

Код стороны загрузчика:

    data= {}
    url_path = 'localhost:5000/loadfile'
    data['filelist']=open('employe.txt', 'rb')
    resp = requests.post(url=url_path, files=data)

Есть идеи, почему он так себя ведет?

Примечание:

  • Когда я загружаю через почтальона, у меня нет проблем.

  • Если я загружаю через код, иногда я получаю частичный файл.

  • файловый объект в журнале при загрузке через почтальона

    'employee.TXT' ('text / plain')>

  • файловый объект в журнале , при загрузке по коду

    'employee.TXT' ('None')>

Ответы [ 2 ]

3 голосов
/ 09 июля 2020

Если проблема связана с размером файла, превышающим предел размера файла, Flask вызовет исключение RequestEntityTooLarge.

В этом случае вы можете просто настроить конфигурационный ключ MAX_CONTENT_LENGTH . Например,

from flask import Flask, Request

app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 20 * 1024 * 1024

. Приведенный выше код устанавливает ограничение на загрузку файла в 20 мегабайт. Если пользователь пытается загрузить файл, размер которого превышает установленный предел (в данном случае 20 МБ), то Flask вызовет исключение RequestEntityTooLarge.

И затем, если требуется, разрешенные расширения файлов также могут быть указаны с помощью ,

ALLOWED_EXTENSIONS = {'txt', 'docx','pdf', 'png', 'jpg', 'jpeg', 'gif'}

Для получения дополнительной помощи см. Flask Docs для загрузки файлов.

1 голос
/ 09 июля 2020
  1. попробуйте установить app.config['MAX_CONTENT_LENGTH'] здесь

  2. попробуйте установить заголовки типа return Response(mimetype='text/plain') вот ссылка для того же

  3. попробуйте этот учебник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...