Caricamento di file al server di Ubuntu utilizzando pallone non riesce con 500 errore interno del server

voti
36

Sto facendo funzionare un'applicazione pallone su un sistema Ubuntu 18.04 con Apache 2 e uWSGI. Quando provo a caricare i file in una directory, non riesce con un codice di 500 errore. Lo script è scritto nella __init__.pye trova all'indirizzo: /var/www/FlaskApp/FlaskApp/__init__.py. La directory per i file caricati si trova all'indirizzo: /var/www/FlaskApp/FlaskApp/uploads. Lo script si presenta come segue:

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

Si visualizza la pagina HTML, ma quando ho fare clic su Invia dopo aver selezionato i file, non riesce. Ho cercato di eseguire il codice con e senza i commenti, ma non riesce ancora. Credo che l'errore si verifica in: file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) ho anche provato diverse strade diverse. Potrebbe essere qualcosa di sbagliato con la configurazione delle app? Io non credo di avere un vero e proprio settings.py, se questo dovrebbe importare.

Grazie mille per le risposte

Il Flask App Error-log mostra questa:

 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/
È pubblicato 26/02/2019 alle 21:34
dall'utente
In altre lingue...                            


2 risposte

voti
0

Ok, ho trovato la soluzione. Quando si cassa una cartella all'interno della Flask App, è necessario dare più permessi rispetto ai valori di default. Nel mio caso usando WinSCP, ho appena cliccato ad ogni scatola.

Risposto il 27/02/2019 a 09:48
fonte dall'utente

voti
0

ho appena testare il codice nel mio funziona perfettamente assicurarsi di avere il permesso di vostra cartella di caricamento solo dare il permesso di scrittura ad esso e il percorso dovrebbe essere corretto, non v'è alcun errore diverso da esso.

Risposto il 27/02/2019 a 09:57
fonte dall'utente

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