【问题标题】:Flask-Uploads Permission DeniedFlask-上传权限被拒绝
【发布时间】:2015-04-13 11:26:58
【问题描述】:

我在我的 Flask 应用程序中使用Flask Uploads 上传表单。但是,每当我尝试保存文件时,我都会收到此错误:

File "/Users/Documents/virtual_environment/bin/../lib/python2.7/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/app'

似乎上传没有保存文件的必要权限?这是我用于烧瓶上传的配置:

UPLOADS_DEFAULT_URL = os.environ.get("UPLOADS_URL", "http://localhost:5000/")
UPLOADS_DEFAULT_DEST = "/app/uploads/"
UPLOAD_EXTENSIONS = set(["csv", "xls", "xsls"])

另外,这是我保存实际文件的方法:

@app.route('/upload', methods = ['GET', 'POST'])
@app.route('/upload/', methods = ['GET', 'POST'])
@roles_accepted('admin', 'team')
def r_upload():
    form = FileUploadForm()

    if form.validate_on_submit():
        filename = uploadSet.save(form.uploadfile.data)
        url = uploadSet.url(filename)
        flash("%s uploaded <a href=\'%s\'>HERE</a>!" % (filename, url))

    return render_template('/uploads.html',
        dashboard_title = "%s Uploads" % g.name,
        form = form)

错误是由保存线引起的。对于如何解决这个问题,有任何的建议吗?谢谢。

【问题讨论】:

  • 你的 linux 用户对/app/uploads/ 有文件权限吗?检查使用ls -la /app/uploads

标签: python flask flask-uploads


【解决方案1】:

您的 linux 用户对 /app/uploads/ 有文件权限吗?检查使用ls -la /app/uploads

请注意,/app 会尝试将文件写入文件系统的根目录/

如果您希望在应用中写入文件,请使用 app/uploads 而不是 /app/uploads/。从错误来看,/app 似乎根本不存在,而写信给app/uploads 正是您想要做的。

【讨论】:

  • 我只是要自己发布这个答案!刚刚想通了。谢谢!这很奇怪,flask-uploads 文档似乎将目录设置为另一种方式。
  • 一般来说,在文件系统上使用绝对路径会减少意外。您可以使用os.path.abspath(os.path.dirname(__file__)) 来确保您始终在相对于当前模块的位置工作。归根结底,您可以随心所欲地进行操作,只需确保运行 WSGI 应用程序的用户具有对该文件夹的写入权限。
【解决方案2】:

我知道这已经晚了 5 年,但我会把它放在这里,以供将来看到它的人使用。

我的解决方案是创建一个同名的空文件 (open("path/to/file.png").close()),然后保存文件

【讨论】:

    猜你喜欢
    • 2015-09-03
    • 2018-07-22
    • 2011-03-09
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 2015-07-11
    相关资源
    最近更新 更多