Загрузка файла Python Flask возвращает 0 байт

Вот код, на котором работает мой фляжный сервер:

from flask import Flask, make_response import os app = Flask(__name__) @app.route("/") def index(): return str(os.listdir(".")) @app.route("/<file_name>") def getFile(file_name): response = make_response() response.headers["Content-Disposition"] = ""\ "attachment; filename=%s" % file_name return response if __name__ == "__main__": app.debug = True app.run("0.0.0.0", port = 6969) 

Если пользователь переходит на сайт, он печатает файлы в каталоге. Однако, если вы перейдете на сайт: 6969 / filename, он должен скачать файл. Однако я делаю что-то неправильно, так как размер файла всегда равен 0 байтам, а загруженный файл не содержит данных. Есть предположения. Я попытался добавить заголовок длины содержимого, и это не сработало. Не знаю, что еще может быть.

  • NameError: имя 'helloworld' не определено
  • Как подключиться к Facebook Graph API из Python с помощью запросов, если мне не нужен токен доступа пользователя?
  • Как конвертировать datetime.time из UTC в другой часовой пояс?
  • Python Multiprocessing сохраняет данные до дальнейшего вызова в каждом процессе
  • Сито Эратосфена - Поиск простых чисел Python
  • Как закодировать комбинационные параметры argparse в python
  • В matplotlib, почему это быстрее, чтобы построить более тонкие линии?
  • APScheduler не запускается?
  • 2 Solutions collect form web for “Загрузка файла Python Flask возвращает 0 байт”

    Весь этот заголовок указывает браузеру обрабатывать данные ответа как загружаемый файл с определенным именем. На самом деле он не устанавливает никаких данных ответа, поэтому он пуст.

    Вам нужно будет установить содержимое файла в ответе, чтобы он работал.

     @app.route("/<file_name>") def getFile(file_name): headers = {"Content-Disposition": "attachment; filename=%s" % file_name} with open(file_name, 'r') as f: body = f.read() return make_response((body, headers)) 

    EDIT – немного очищенный код на основе api docs

    Как писал Дэнни, вы не предоставляете никакого контента в своем ответе, поэтому вы получаете 0 байт. Тем не менее, есть простая функция send_file в Flask для возврата содержимого файла:

     from flask import send_file @app.route("/<file_name>") def getFile(file_name): return send_file(file_name, as_attachment=True) 

    Обратите внимание, что file_name относительно корневого пути приложения ( app.root_path ) в этом случае.

    Interesting Posts

    Переопределить метод модуля, где используется … импорт

    Для чего используется itertools.groupby ()?

    как я могу получить строку шаблона из скомпилированного шаблона регулярного выражения в python

    Используйте Line2D для построения линии в python

    python unicode: Как я могу судить, нужно ли декодировать строку в utf-8?

    Я получаю ошибку 400 Bad Request при использовании django-piston

    Строка csv Python для массива

    Pandas: изменение дат в формате dataframe в тот же формат даты

    Как найти все элементы в двумерном массиве numpy, который соответствует определенному списку?

    Передача словаря функции в python в качестве параметров ключевого слова

    Как вычислить сумму всех столбцов массива 2D numpy (эффективно)

    Преобразуйте букву колонки Excel или таблицы в ее число в Pythonic

    проблема блокировки многопроцессорности python

    Получение сообщения о ходе выполнения из подпроцесса

    Как я могу получить все заголовки запросов в Django?

    Python - лучший язык программирования в мире.