Bestanden uploaden naar Ubuntu server met behulp van kolf mislukt met 500 internal server error

stemmen
36

Ik stel een fles applicatie op een Ubuntu 18.04 systeem met Apache 2 en uwsgi. Wanneer ik probeer om bestanden te uploaden naar een map, ontbreekt het met een 500 error code. Het script is geschreven in het __init__.pyen te vinden op: /var/www/FlaskApp/FlaskApp/__init__.py. De map voor geüploade bestanden is te vinden op: /var/www/FlaskApp/FlaskApp/uploads. Het script ziet er als volgt:

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()

Het toont de HTML-pagina, maar wanneer ik op te leggen na het selecteren van bestanden, het mislukt. Ik heb geprobeerd om de code uit te voeren, zowel met als zonder de opmerkingen, maar het nog steeds niet. Ik denk dat de fout optreedt bij het: file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) Ik heb ook geprobeerd een aantal verschillende paden. Zou het kunnen er iets mis is met de configuratie van de app? Ik denk niet dat ik een echte settings.py, als dat zou van belang.

Hartelijk dank voor antwoorden

De kolf App Fout-log laat dit zien:

 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/
De vraag is gesteld op 26/02/2019 om 21:34
user
In andere talen...                            


2 antwoorden

stemmen
0

Ok, vond ik de oplossing. Wanneer u een map in de Kolf App krat, moet je er meer rechten dan de standaardwaarden te geven. In mijn geval met behulp van WinSCP, ik klikte op elke doos.

antwoordde op 27/02/2019 om 09:48
bron van user

stemmen
0

Ik heb net code te testen in mijn eigen het werkt perfect zorg ervoor dat je toestemming om uw uploadmap geef schrijfrechten aan het en het pad moet correct te zijn is er geen andere dan het fout.

antwoordde op 27/02/2019 om 09:57
bron van user

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