【问题标题】:Flask image cant upload (FileNotFoundError: [Errno 2] No such file or directory)Flask 图像无法上传(FileNotFoundError: [Errno 2] No such file or directory)
【发布时间】:2021-04-14 10:17:20
【问题描述】:

您好,我编写了一个博客脚本,但收到 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'

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

请帮帮我

【问题讨论】:

  • /images中删除/,只保留images

标签: python python-3.x flask


【解决方案1】:

根据您分享的代码,我相信您上传了一张图片并将其保存在一个文件夹中,

问题似乎是路径的生成方式,来自文档 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/

【讨论】:

    【解决方案2】:

    作为@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')
    

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 2012-08-25
      • 2019-10-14
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多