La posibilidad de subir archivos al servidor Ubuntu usando frasco falla con 500 error interno del servidor

votos
36

Estoy corriendo una aplicación frasco en un sistema Ubuntu 18.04 con Apache 2 y uWSGI. Cuando trato de cargar archivos en un directorio, se produce un error con un código de error 500. El guión está escrito en el __init__.pyy ubicado en: /var/www/FlaskApp/FlaskApp/__init__.py. El directorio para los archivos subidos se encuentra en: /var/www/FlaskApp/FlaskApp/uploads. La secuencia de comandos se parece a lo siguiente:

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 muestra la página HTML, pero cuando lo haga clic en enviar después de seleccionar los archivos, falla. He tratado de ejecutar el código con y sin los comentarios, pero no lo consigo. Creo que el error se produce en el: file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) varios caminos diferentes También he probado. Podría haber algo mal con la configuración de la aplicación? No creo que tengo una settings.py real, si que debería importar.

Muchas gracias por las respuestas

El frasco Aplicación de errores de registro muestra esto:

 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/
Publicado el 26/02/2019 a las 21:34
por usuario
En otros idiomas...                            


2 respuestas

votos
0

Bueno, he encontrado la solución. Cuando cajón una carpeta dentro de la App Frasco, hay que darle más permisos que los valores por defecto. En mi caso usando WinSCP, i acaba de hacer clic en cada cuadro.

Respondida el 27/02/2019 a las 09:48
fuente por usuario

votos
0

acabo de probar el código en mi propia que funciona perfectamente asegurarse de que tiene permiso para su carpeta de carga acaba de dar permiso de escritura a la misma y la ruta debe ser correcto no hay ningún error que no sea él.

Respondida el 27/02/2019 a las 09:57
fuente por usuario

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