python - 在 Linux 服务器上从烧瓶下载文件时出错
问题描述
我的代码在我的 Windows 机器上运行良好:
@app.route('/downloads/<filename>', methods=["GET", "POST"])
def downloads(filename):
return send_file(filename, as_attachment=True)
它使用标签为 html 页面上列表中的每个特定项目传递变量。在我的 Windows 机器上,我使用反斜杠指定文件名(这是文件的目录)变量(然后无论出于何种原因在搜索栏中转换为“%5C”)。这工作正常,但是当我在我的 linux 机器上运行相同的代码时,它会在浏览器上给我一个“内部服务器错误”,并且在服务器上出现这个错误。
FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/ss/python_files\\user\\file.py'
现在我明白Linux对目录使用“正斜杠”,而Windows出于任何原因使用“反斜杠”,我认为这是错误,但是当我尝试在目录中使用“正斜杠”时,它给了我一个404错误浏览器:
'未找到 在服务器上未找到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试。
它在服务器上给了我这个:
"GET /downloads/python_files/user/file.py HTTP/1.1" 404 -
这会让你觉得也许我只是有错误的文件路径,但是当我进入与服务器的 python 文件相同的目录并输入:
python3 python_files/user/file.py
它运行文件,所以它的路径没有问题......无论如何,这就是我被难住并意识到我没有足够的知识来修复错误的地方。非常感谢您的帮助!
解决方案
请参阅本节https://flask.palletsprojects.com/en/1.1.x/quickstart/#variable-rules
或者,您可以使用转换器来指定参数的类型,例如<converter:variable_name >。
因此,如果您<path:filename>
在路线中指定为转换器,那应该可以解决您的问题
@app.route('/downloads/<path:filename>', methods=["GET", "POST"])
因为如果没有明确指定,它默认为string
转换器,它会接受任何没有斜杠的文本,这就是你得到错误的原因
"GET /downloads/python_files/user/file.py HTTP/1.1" 404 -
推荐阅读
- java - 关于android上各种按钮的问题
- javascript - socket.io 连接问题
- scala - 大量源代码文件对编译性能的影响
- python-3.x - 尝试求解大型 PDE 系统时出错
- ruby-on-rails - 为什么我的模型没有在我的 Rails API 中更新?
- jfreechart - 如何在具有单独范围轴的条形图上绘制两个数据系列
- javascript - javascript 用两个按钮隐藏/显示 div 的手风琴 ASP.NET
- file - 使用批处理脚本打开文件对话框后如何选择文件?
- c++ - 是否可以从 shared_ptr 的向量中删除元素?
- django - Wagtail - 如何访问块内的 StructBlock 类属性