Încărcarea fișierelor pe serverul Ubuntu folosind balon nu cu 500 eroare internă de server

voturi
36

Sunt rulează o aplicație balon pe un sistem Ubuntu 18.04 cu Apache 2 și uWSGI. Când încerc să încărcați fișiere într - un director, acesta nu cu un cod de eroare de 500. Scenariul este scris în __init__.pyși situat la: /var/www/FlaskApp/FlaskApp/__init__.py. Directorul pentru fișierele încărcate este situat la: /var/www/FlaskApp/FlaskApp/uploads. Script - ul arată ca următorul:

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

Se afișează pagina HTML, dar atunci când fac clic depune după selectarea fișierelor, eșuează. Am încercat să ruleze codul atât cu și fără comentarii, dar încă nu reușește. Cred că eroarea apare la: file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) am încercat , de asemenea , mai multe căi diferite. Ar putea fi ceva în neregulă cu configurația aplicației? Nu cred că am o settings.py reală, în cazul în care ar trebui să conteze.

Multumesc foarte mult pentru răspunsuri

Flaconul a App Error-log arată acest lucru:

 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/
Întrebat 26/02/2019 la 21:34
de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
0

Ok, am găsit soluția. Când naveta un dosar în interiorul App Flaconul a, trebuie să-l dea mai multe permisiuni decât cele implicite. În cazul meu, folosind WinSCP, am făcut clic la fiecare cutie.

Publicat 27/02/2019 la 09:48
sursa de către utilizator

voturi
0

Am testat doar codul în propria mea că funcționează perfect asigurați-vă că aveți permisiunea în dosarul de încărcare dau doar permisiunea de a scrie și să-l calea ar trebui să fie corectă nu există nici o greșeală, alta decât ea.

Publicat 27/02/2019 la 09:57
sursa de către utilizator

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