首页 > 解决方案 > 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" ...>

标签: fileflaskunicodepythonanywhere

解决方案


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)

推荐阅读