file - PythonAnywhere 中的 Flask 找不到带有西班牙语字符的文件名
问题描述
我正在尝试建立一个网站,该网站有一个用于下载一些资源的页面,而恰好我的本地烧瓶版本完美地找到了任何文件名(使用时send_from_directory()
),但是一旦部署在 PythonAnywhere 它就不适用于文件名具有西班牙重音字符,例如á
.
我猜它与 unicode 有关,但我找不到如何修复它(pythonanywhere 的日志似乎没有显示任何内容,因为flask 只是向用户提供了一个“未找到”页面)。
...而且我真的很想在人们下载的文件的名称中加上这些口音(它们是 anki 套牌,其中一些用于教育目的,在套牌名称中提供糟糕的正字法只是感觉不对) .
我的代码如下所示:
@app.route('/anki/d/<file>')
def d_anki(file):
if file == "verbscat":
ankideck = "[Rusca] Temps Verbals Catalans.apkg"
elif file == "irregular":
ankideck = "[Rusca] Verbs Irregulars Anglès.apkg"
# ...
else:
return f"The file {file} wasn't found."
return send_from_directory("./static/anki/", ankideck, as_attachment=True, cache_timeout=0)
(然后我通过按钮链接到此网址<a href="/anki/d/irregular" ...>
)
解决方案
attachment_filename="Whatever I want to call it"
哦,我刚刚意识到我可以通过添加参数来为下载的文件选择一个不同的名称send_from_directory
。
所以我想我们可以使用这个解决方法(让原始文件具有简单的非重音名称,然后添加正确的名称)。
if file == "irregular":
ankideck = "irregular.apkg"
name = "[Rusca] Verbs Irregulars Anglès.apkg"
# ...
return send_from_directory("./static/anki/", ankideck, as_attachment=True, attachment_filename=name cache_timeout=0)
推荐阅读
- sql - 将查询结果中的一列附加到 SQL 中的另一列
- angular - 没有重载与角度上的此调用相匹配
- java - 我该如何解决这个中断标签问题?
- sql - 如何在 GORM 中选择年份
- laravel - 自动登录上的 Laravel 事件监听器(记得我)?
- html - HTML 电子邮件免责声明不起作用(Office 365/Exchange Online)
- css - 如何将 div 放在其具有线性渐变作为其遮罩图像的父 div 上?
- php - Laravel View 不适合 dompdf 生成的 pdf
- wordpress - 如果条件正确,wordpress
- node.js - 我们如何从 CF 中托管的 NodeJS 应用程序访问外部 .CSV 文件