Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 31, 2020 17:33:02

lifemaker
Зарегистрирован: 2019-10-16
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Flask send_file attachment_filename [решено]

Всем здравствуйте.
Столкнулся со следующей проблемой. При отправке сгенерированного файла функцией send_file() задаю имя файла через attachment_filename=“123.csv”
Но в заголовке имя файла значится без кавычек Content-Disposition: attachment; filename=123.txt
Как я понимаю, именно из-за этого файл у меня сохраняется по имени метода.
Пробовал добавить заголовки x-filename и x-suggested-filename, но это не срабатывает. По крайней мере в Opera.
Есть идеи как это побороть?

Отредактировано lifemaker (Фев. 3, 2020 09:05:46)

Офлайн

#2 Фев. 1, 2020 03:01:23

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Flask send_file attachment_filename [решено]

lifemaker
Но в заголовке имя файла значится без кавычек
Когда там нужны кавычки, Flask их вставляет. Я проверил на пробеле в имени файла.

lifemaker
Как я понимаю, именно из-за этого файл у меня сохраняется по имени метода.
Конкретнее напиши. У меня всё нормально сохраняется.

lifemaker
По крайней мере в Opera.
Попробуй другой браузер. Если в них во всех так, это одно. Если же в них всё нормально, то дело может быть и в самой Opera. Может быть баг в Opera.



Офлайн

#3 Фев. 2, 2020 11:43:26

lifemaker
Зарегистрирован: 2019-10-16
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Flask send_file attachment_filename [решено]

py.user.next
Когда там нужны кавычки, Flask их вставляет. Я проверил на пробеле в имени файла.
Да, когда я добавил пробелы тоже header был с кавычками.
py.user.next
Конкретнее напиши. У меня всё нормально сохраняется.
@app.route('/download_report')
def download_report():
csv_file = “”
file = io.BytesIO()
file.write(bytes(csv_file, ‘utf-16’))
file.seek(0)
response = send_file(file, mimetype='text/csv', as_attachment=True, attachment_filename='123.csv')
return response

Файл сохраняется с именем download_report без расширения.
Также пробовал добавлять заголовки
response.headers = “123.csv”
response.headers = “123.csv”
Не помогло.
py.user.next
Попробуй другой браузер. Если в них во всех так, это одно. Если же в них всё нормально, то дело может быть и в самой Opera. Может быть баг в Opera.
Я уже проверял, поэтому упомянул про Opera. В IE всё ок. Но у нас основной браузер Opera. Возможно, это не связано с Фласк, но может кто-то подскажет, что нужно добавить, чтобы Opera корректно сохранила?

Офлайн

#4 Фев. 2, 2020 11:59:18

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Flask send_file attachment_filename [решено]

lifemaker
Я уже проверял, поэтому упомянул про Opera. В IE всё ок.
Проверь в Mozilla Firefox, Google Chrome, Yandex Browser. Если в них всё работает, то надо сходить на сайт Opera и добавить туда сообщение, что им надо исправить свой браузер.

lifemaker
что нужно добавить
Нужно добавить им топик.

Можешь попробовать заголовок поставить
https://tools.ietf.org/html/rfc2616#section-19.5.1
 An example is
Content-Disposition: attachment; filename="fname.ext"
Его можно напрямую поставить, Flask не будет его редактировать.



Отредактировано py.user.next (Фев. 2, 2020 12:00:18)

Офлайн

#5 Фев. 3, 2020 09:05:19

lifemaker
Зарегистрирован: 2019-10-16
Сообщения: 18
Репутация: +  1  -
Профиль   Отправить e-mail  

Flask send_file attachment_filename [решено]

Проблемы как таковой оказалось нет - запрос брался из кеша, поэтому мои эксперименты не давали эффекта.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version