Hochladen von Dateien auf Ubuntu-Server mit Kolben schlagen mit 500 Internal Server Error

stimmen
36

Ich arbeite mit einer Kolben - Anwendung auf einem Ubuntu 18.04 - System mit Apache 2 und uwsgi. Wenn ich versuche , Dateien in einem Verzeichnis zu laden, schlägt es mit einem 500 - Fehlercode. Das Skript wird in der geschrieben __init__.pyund sich unter: /var/www/FlaskApp/FlaskApp/__init__.py. Das Verzeichnis für hochgeladene Dateien befindet sich unter: /var/www/FlaskApp/FlaskApp/uploads. Das Skript sieht wie folgt aus :

from flask import Flask, render_template, request, url_for, redirect, 
send_from_directory, send_file, flash
from werkzeug.utils import secure_filename
import os

UPLOAD_FOLDER = '/var/www/FlaskApp/FlaskApp/uploads'
#ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

app = Flask(__name__)

app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

@app.route('/test/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        #if 'file' not in request.files:
            #flash('No file part')
            #return redirect(request.url)
        file = request.files['file']
        #if file.filename == '':
            #flash('No selected file')
            #return redirect(request.url)
        #if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            #return redirect(url_for('uploaded_file',
                                    #filename=filename))
    return '''
    <!doctype html>
    <title>Upload new File</title>
    <h1>Upload new File</h1>
    <form method=post enctype=multipart/form-data>
      <input type=file name=file>
      <input type=submit value=Upload>
    </form>
    '''     


@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'],
                               filename)        

                            

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

Es zeigt die HTML - Seite, aber wenn ich nach der Auswahl von Dateien einreichen klicken, es funktioniert nicht. Ich habe versucht , den Code sowohl mit als auch ohne die Kommentare zu laufen, aber es immer noch nicht . Ich denke , der Fehler tritt bei der: file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) Ich habe auch versucht , mehrere verschiedene Wege. Könnte es etwas falsch mit der Konfiguration der App sein? Ich glaube nicht , ich habe eine echte settings.py, wenn die Materie sollte.

Vielen Dank für Antworten

Das Flask App Fehler-Protokoll zeigt dies:

 ERROR:flask.app:Exception on /test/ [POST], referer: http:the.servers.ip.adress/test/
 Traceback (most recent call last):, referer: http:the.servers.ip.adress/test/
File /usr/local/lib/python3.6/dist-packages/flask/app.py, line 2292, in wsgi_app, referer: http:the.servers.ip.adress/test/
response = self.full_dispatch_request(), referer: http:the.servers.ip.adress/test/
File /usr/local/lib/python3.6/dist-packages/flask/app.py, line 1815, in full_dispatch_request, referer: http:the.servers.ip.adress/test/
rv = self.handle_user_exception(e), referer: http:the.servers.ip.adress/test/
File /usr/local/lib/python3.6/dist-packages/flask/app.py, line 1718, in handle_user_exception, referer: http:the.servers.ip.adress/test/
reraise(exc_type, exc_value, tb), referer: http:the.servers.ip.adress/test/
File /usr/local/lib/python3.6/dist-packages/flask/_compat.py, line 35, in reraise, referer: http:the.servers.ip.adress/test/
raise value, referer: http:the.servers.ip.adress/test/
File /usr/local/lib/python3.6/dist-packages/flask/app.py, line 1813, in full_dispatch_request, referer: http:the.servers.ip.adress/test/
rv = self.dispatch_request(), referer: http:the.servers.ip.adress/test/
File /usr/local/lib/python3.6/dist-packages/flask/app.py, line 1799, in dispatch_request, referer: http:the.servers.ip.adress/test/
return self.view_functions[rule.endpoint](**req.view_args), referer: http:the.servers.ip.adress/test/
File /var/www/FlaskApp/FlaskApp/__init__.py, line 27, in upload_file, referer: http:the.servers.ip.adress/test/
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)), referer: http:the.servers.ip.adress/test/
File /usr/local/lib/python3.6/dist-packages/werkzeug/datastructures.py, line 2725, in save, referer: http:the.servers.ip.adress/test/
dst = open(dst, 'wb'), referer: http:the.servers.ip.adress/test/

PermissionError: [Errno 13] Permission denied: '/var/www/FlaskApp/FlaskApp/uploads/an_image.jpg', referer: http:the.servers.ip.adress/test/
referer: http:the.servers.ip.adress/test/

ERROR:flask.app:Exception on /prov/ [POST], referer: http:the.servers.ip.adress/test/
Traceback (most recent call last):, referer: http:the.servers.ip.adress/test/
Veröffentlicht am 26/02/2019 um 21:34
vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

Ok, ich fand die Lösung. Wenn Sie Kiste einen Ordner innerhalb des Kolbens App haben Sie es mehr Berechtigungen als die Standardwerte geben. In meinem Fall mit WinSCP, ich klickte nur an jeder Box.

Beantwortet am 27/02/2019 um 09:48
quelle vom benutzer

stimmen
0

i-Test-Code nur in meinem eigenen funktioniert perfekt sicherstellen, dass Sie die Erlaubnis, Ihren Upload-Ordner nur geben Schreibrechte darauf haben und der Weg sollte korrekt sein gibt es keine Fehler anders als es.

Beantwortet am 27/02/2019 um 09:57
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more