PythonAnywhere中的Flask无法找到带有西班牙语字符的文件名

问题描述 投票:0回答:1

[我正在尝试建立一个网站,该页面上有一个页面可以下载一些资源,并且碰巧我的本地烧瓶版本可以完美地找到任何文件名(使用send_from_directory()时),但是一旦部署在PythonAnywhere上,它就不会t适用于带有西班牙重音符号的文件名,例如á

我想它与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" ...>在按钮中链接到该URL)

file flask unicode pythonanywhere
1个回答
1
投票
哦,我刚刚意识到可以通过在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)

© www.soinside.com 2019 - 2024. All rights reserved.