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

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

lifemaker
По крайней мере в Opera.
Попробуй другой браузер. Если в них во всех так, это одно. Если же в них всё нормально, то дело может быть и в самой Opera. Может быть баг в Opera.
lifemaker
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 корректно сохранила?
py.user.next
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 не будет его редактировать.
lifemaker
Проблемы как таковой оказалось нет - запрос брался из кеша, поэтому мои эксперименты не давали эффекта.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB