Flask В разрешении на загрузку файла отказано - PullRequest
0 голосов
/ 11 июля 2020

Я размещаю веб-приложение на своем сервере 8Ubuntu 18.04, используя Flask.

Цель моего приложения - загрузить изображение (или любые файлы на данный момент). Однако при попытке загрузить файл в папку img я получаю ошибку разрешения:

 ERROR:cloud:Exception on / [POST], referer: http://192.168.1.35/
 Traceback (most recent call last):, referer: http://192.168.1.35/
   File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 2447, in wsgi_app, referer: http://192.168.1.35/
     response = self.full_dispatch_request(), referer: http://192.168.1.35/
   File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1952, in full_dispatch_request, referer: http://192.168.1.35/
     rv = self.handle_user_exception(e), referer: http://192.168.1.35/
   File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1821, in handle_user_exception, referer: http://192.168.1.35/
     reraise(exc_type, exc_value, tb), referer: http://192.168.1.35/
   File "/usr/local/lib/python3.6/dist-packages/flask/_compat.py", line 39, in reraise, referer: http://192.168.1.35/
     raise value, referer: http://192.168.1.35/
   File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1950, in full_dispatch_request, referer: http://192.168.1.35/
     rv = self.dispatch_request(), referer: http://192.168.1.35/
   File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1936, in dispatch_request, referer: http://192.168.1.35/
     return self.view_functions[rule.endpoint](**req.view_args), referer: http://192.168.1.35/
   File "/var/www/cloud/cloud/__init__.py", line 15, in upload_image, referer: http://192.168.1.35/
     image.save(os.path.join(app.config["IMAGE_UPLOADS"], image.filename)), referer: http://192.168.1.35/
   File "/usr/local/lib/python3.6/dist-packages/werkzeug/datastructures.py", line 3066, in save, referer: http://192.168.1.35/
     dst = open(dst, "wb"), referer: http://192.168.1.35/
 PermissionError: [Errno 13] Permission denied: '/var/www/cloud/cloud/static/img/uploads/3E5A33B5-7E19-461A-B0C5-6835080675E7.jpeg', referer: http://192.168.1.35/
 , referer: http://192.168.1.35/
 AH00491: caught SIGTERM, shutting down
 AH00489: Apache/2.4.29 (Ubuntu) mod_wsgi/4.5.17 Python/3.6 configured -- resuming normal operations
 AH00094: Command line: '/usr/sbin/apache2'

Итак, я понимаю, что есть ошибка разрешения. Как это можно исправить?

Моя файловая структура следующая:

enter image description here

My code (python3) for __init__.py is the following :

import os
from flask import Flask, flash, request, redirect, url_for, render_template

app = Flask(__name__)
app.config["IMAGE_UPLOADS"] = "/var/www/cloud/cloud/static/img/uploads"


@app.route("/", methods = ["GET", "POST"])
def upload_image():
    if request.method == "POST":
        if request.files:
            image = request.files["image"]
            print(image)
            image.save(os.path.join(app.config["IMAGE_UPLOADS"], image.filename))
            return "IMAGE SAVED"
    return render_template('upload-image.html')

if __name__ == "__main__":
    app.run()

and for upload-image.html i is the following :

<!DOCTYPE html>
  ПРИВЕТ     Это тест  Выберите изображение   Загрузить      

Я не получаю эту ошибку, когда он работает локально, а только когда я развертываю t чтобы он был доступен на компьютерах в той же локальной сети, что и мой.

Я следую этому руководству: https://www.youtube.com/watch?v=6WruncSoCdI

Ответы [ 3 ]

0 голосов
/ 11 июля 2020

Это ошибка:

PermissionError: [Errno 13] Permission denied: '/var/www/cloud/cloud/static/img/uploads/3E5A33B5-7E19-461A-B0C5-6835080675E7.jpeg', referer: http://192.168.1.35/

Это ошибка операционной системы, в которой говорится, что у вас нет разрешения на создание файла в этом каталоге.

Теперь , когда я говорю «у вас» нет разрешения, я имею в виду пользователя, который запускает процесс. Какой это пользователь, зависит от конфигурации сервера.

Вы можете запустить chown, чтобы изменить владельца каталога, чтобы он принадлежал пользователю, который собирается получить к нему доступ, или вы можете go для более простого варианта, который позволяет всем писать в этот каталог, если вы не возражаете против риска безопасности:

chmod 777 /var/www/cloud/cloud/static/img/uploads
0 голосов
/ 11 июля 2020

Вам необходимо настроить разрешения для этой папки.

Это можно сделать с помощью комбинации chmod для установки разрешений и chown для изменения владельца / группы папки.

Если у вас возникли проблемы с исправлением этого самостоятельно, покажите нам текущие разрешения / права собственности.

А также вам нужно знать, какой пользователь запускает ваше приложение Flask.

0 голосов
/ 11 июля 2020

Разрешите 777 папке на сервере, куда вы хотите загружать файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...