当 Flask 服务器保存图像文件时如何解决获取 "permission denied" 的问题

How do I fix problem with getting "permission denied" when Flask server is saving an image file

Flask 在我们的服务器上保存图像文件时遇到问题。我们已确保我们尝试写入的目录具有写入权限。我们使用 chmod images 777。 但是我们得到“权限被拒绝”。

我做了“chmod 777 images”目录 ls -l 结果是 drwxrwxrwx 2 someuser someuser 4096 2021 年 7 月 16 日图像

提交文件的表单结果: 相同的响应:权限被拒绝

以下是我们拥有的相关代码片段:

<form action="/someurl" method="post" enctype="multipart/form-data" id="workform">
<input  type="file" name="photobefore” />
<input  type="file" name="photoafter" />
<input type=“submit” />
</form>

服务器:

@main_blueprint.route(‘/someurl’, methods=['GET', 'POST'])
def workperformed():
        message = “submitted”
        before = ""
        after = ""
        try:
            if len(request.files) > 0:
                for name in request.files:
                    file = request.files[name]
                    if name == 'photobefore':
                        before = file.filename
                    if name == 'photoafter':
                        after = file.filename
                    if not file.filename == '':
                        if file and allowed_file(file.filename):
                            filename = secure_filename(file.filename)
                            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))

        except Exception as e:
            message = "dir:" + os.getcwd() + " error:" + str(e)

        return message

结果: dir:/ error:[Errno 13] 权限被拒绝:'/home/someuser/public_html/mydefensiblespace.org/html/templates/static/images/20190721_184017_HDR.jpg'

Web 服务器(假设 Ubuntu 上的 Apache 或 Nginx)需要是您保存图像的文件夹的所有者

chown -R www-data:www-data /path/to/folder

我相信 Nginx 也需要该文件夹才能执行

chmod +x /path/to/folder 

此外,由于您的文件夹路径在 /var/www 之外,因此您需要在虚拟主机中添加一个指令

<VirtualHost *:80>
 ServerName domain.com
 # ...
 <Directory /path/to/folder>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
 </Directory> 
</VirtualHost>