Flask 图像无法上传(FileNotFoundError: [Errno 2] No such file or directory)

时间:2021-04-14 10:17:20

标签: python python-3.x flask

嗨,我编写了一个博客脚本,但出现 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'

我以前从未收到过这样的错误,我不知道为什么。

请帮帮我

2 个答案:

答案 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 上传文件,您可能需要采取更多措施来保持文件的完整性,这可能会有所帮助

https://flask-uploads.readthedocs.io/en/latest/

答案 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')