Создайте ссылку со значениями utf-8 и передайте ее в маршрут Flask
Как я могу гарантировать, что следующая HTML-ссылка будет возвращать себя с utf-8
кодирование?
<meta http-equiv="REFRESH" content="5; URL=http://superhost.gr/files/download?filename={{ filename }}">
Как и сейчас, хотя значение имени файла извлекается из Flask как utf-8
это не формирует ссылку URL также как utf-8
,
Вот как я получаю это значение и пытаюсь использовать его для загрузки файла.
# Prepare selected file for download...
if request.args:
filename = request.args.get('filename') # value comes from template url link
filepath = '/static/files/'
return send_from_directory( filepath, filename, as_attachment=True )
Я пытаюсь сгенерировать ссылку с Jinja2 / Flask под модом Apache/WSGI.
Возможно, Apache под mod_wsgi вызывает эту проблему?!
Ошибка, которую я вижу в браузере:
Bad Request
The browser (or proxy) sent a request that this server could not understand.
Ссылка, созданная в соответствии с вкладкой Chrome Developer Tool/Network Tab для тестового файла со смешанным именем файла (греческий + английский):
1 ответ
Я пытаюсь воспроизвести вашу проблему, но думаю, что вы должны предоставить больше информации.
Я попытался настройки ниже и файл с именем Νικόλαος Βέργος.pdf
правильно возвращается /redirect/
,
app.py
from flask import render_template
from flask import Flask
from flask import request, send_from_directory
app = Flask(__name__)
@app.route('/')
def home():
filename='Νικόλαος Βέργος.pdf'
return render_template('home.html', filename=filename)
@app.route('/redirect/')
def redirect():
if request.args:
filename = request.args.get('filename')
filepath = '/static/files/'
return send_from_directory(filepath, filename, as_attachment=True)
шаблоны /home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="REFRESH" content="5; URL=http://127.0.0.1:5000/redirect/?filename={{ filename }}">
<title>title</title>
</head>
<body>
</body>
</html>