FileNotFoundError при загрузке файла с использованием Flask - PullRequest
1 голос
/ 10 февраля 2020

Я использую Flask в качестве серверной части для мобильного приложения, и одной из его функций является загрузка и переименование изображений для изображений профиля и прикрепление медиа-сообщения

В последнее время веб-сервисы загрузки возвращают FileNotFoundError: [Errno 2] No such file or directory с 500 Error при использовании их на сервере разработки

Я не думаю, что это проблема кода, так как она отлично работает в моей локальной среде, но там происходит сбой.

Это traceback с сервера dev

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 2463, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 2449, in wsgi_app
    response = self.handle_exception(e)
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1866, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.6/dist-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python3.6/dist-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.6/dist-packages/flask/app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/var/www/xxxxx.com/xxxxx/controllers/posts.py", line 14, in posts
    return posts_service.post(request)
  File "/usr/local/lib/python3.6/dist-packages/flask_jwt/__init__.py", line 177, in decorator
    return fn(*args, **kwargs)
  File "/var/www/xxxxx.com/xxxxx/services/posts.py", line 82, in post
    file.save(filepath)
  File "/usr/local/lib/python3.6/dist-packages/werkzeug/datastructures.py", line 2800, in save
    dst = open(dst, "wb")
FileNotFoundError: [Errno 2] No such file or directory: 'xxxxx/uploads/fc23dfb1-6852-47cc-9090-4aa80a1f1d9d.jpe'

А вот и функция post

@jwt_required()
def post(request):
    if 'file' not in request.files:
        return {
            'success': False,
            'message': 'No file part in the request',
        }, 200
    file = request.files['file']
    if file.filename == '':
        return {
            'success': False,
            'message': 'No file selected for uploading',
        }, 200
    if file and allowed_file(file.mimetype):
        filepath = makepath(file.mimetype)
        file.save(filepath)
        post = post_repo.create(
            current_identity.id,
            request.form['matchId'],
            request.form['teamSelected'],
            request.form['content'],
            request.form['postType'],
            filepath,
            request.form['location']
        )
        if post:
            return {
                'success': True,
                'message': 'Post successfully created',
                'post': post_repo.to_dto(post),
            }, 201
    return {
        'success': False,
        'message': 'File extension not allowed',
    }, 200

Я уже сделал chmoded каталог загрузки для записи с помощью others

Среда разработки размещается в среде docker с использованием apache 2.4 и wsgi для обслуживания

Что мне следует попросить администраторов сервера проверить там?

Редактировать: Я только что заметил, что когда я ls -la каталог, столбец группы не существует. Может быть, поэтому загрузка не работает?

[echo] Check final permissions
[exec] drwxr-xrwx 2 33 www-data 4096 Feb 10 09:35 .
[exec] drwxr-xr-x 12 33 www-data 4096 Feb 10 09:35 ..
[exec] -rw-r--r-- 1 33 www-data 1791 Feb 10 09:35 726f052d-2ad8-41cd-98fa-41eb2c9ba728.png
[exec] -rw-r--r-- 1 33 www-data 12605 Feb 10 09:35 camera.jpg
[exec] -rw-r--r-- 1 33 www-data 4208 Feb 10 09:35 camera.png

Обновление: Как указано в комментариях, я пытался использовать абсолютный путь при использовании функции сохранения, что приводило к нечетному сообщение об ошибке в стековой трассировке, оно сгенерировало что-то еще, такое как FileNotFoundError: [Errno 2] No such file or directory: '/xxxxx/uploads/b94a6fd0-af54-45f1-95d4-5cbe1dc7ca38.jpe', добавив / непосредственно перед именем папки, и имеет смысл, почему здесь произойдет сбой, поскольку этот путь не существует на сервере

...