嗨,我编写了一个博客脚本,但出现 FileNotFound 错误。 Python代码:
@app.route('/upload',methods=['POST'])
def upload():
title = request.form['title']
context = request.form['text']
author = request.form['author']
img=request.files['img']
path = os.path.join(app.root_path,'/images',img.filename)
img.save(path)
new=Posts(title=title,context=context,image=path,author=author)
db.session.add(new)
db.session.commit()
return redirect(url_for('blog'))
错误:
img.save(path)
File "/home/coderrpy/.virtualenvs/python/lib/python3.8/site-packages/werkzeug/datastructures.py", line 3066, in save
dst = open(dst, "wb")
FileNotFoundError: [Errno 2] No such file or directory: '/images/images.jpeg'
我以前从未收到过这样的错误,我不知道为什么。
请帮帮我
答案 0 :(得分:0)
从你分享的代码来看,我相信你上传了一张图片并将其保存在一个文件夹中,
问题似乎是路径的生成方式,来自文档 os.path https://docs.python.org/3/library/os.path.html
<块引用>智能地连接一个或多个路径组件。返回值是 path 和 *paths 的任何成员的串联 除了最后一个之外的每个非空部分之后的目录分隔符, 这意味着结果只会以分隔符结尾,如果最后一部分 是空的。如果一个组件是绝对路径,则之前的所有组件 被丢弃并从绝对路径继续加入 组件。
为了完成这项工作,您可以通过这种方式定义路径
path = os.path.join(app.root_path,'/images',img.filename)
此外,如果您通过 Flask 上传文件,您可能需要采取更多措施来保持文件的完整性,这可能会有所帮助
答案 1 :(得分:0)
作为@sahasrara62 points out in a comment
您可能只需要从 /
中删除前面的 /images
,这可能会欺骗 .join()
>>> import os
>>> os.path.join("/foo", "/bar")
'/bar'
>>> os.path.join("/foo", "bar")
'/foo/bar'
我还建议使用 pathlib
,它的行为应该类似,但通过使用逻辑 Path
对象而不是普通字符串
>>> import pathlib
>>> pathlib.Path("/foo", "bar", "filename")
PosixPath('/foo/bar/filename')