Cuando cargo un archivo nuevo, se guarda en la carpeta raíz de la aplicación, aunque especifiqué una UPLOAD_FOLDER diferente. ¿Por qué no funciona la configuración?
views.py :
from flask import render_template from flask import request, redirect, url_for,flash from werkzeug.utils import secure_filename from app import app import os APP_ROOT = os.path.dirname(os.path.abspath(__file__)) UPLOAD_FOLD = '/Users/blabla/Desktop/kenetelli/htmlfi' UPLOAD_FOLDER = os.path.join(APP_ROOT, UPLOAD_FOLD) app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER @app.route('/') def tmrf(): return render_template('main.html') @app.route('/uploader', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': f = request.files['file'] f.save(secure_filename(f.filename)) return 'file uploaded successfully' __init__.py :
from flask import Flask UPLOAD_FOLDER = '' ALLOWED_EXTENSIONS = set('*.doc') app = Flask(__name__) app.config.from_object('config') from app import viewsUPLOAD_FOLDER no es una opción de configuración reconocida por Flask. f.save funciona en relación con el directorio de trabajo actual, que suele ser la raíz del proyecto durante el desarrollo.
Una el nombre de archivo protegido a la carpeta de carga y luego guárdelo en esa ruta.
f.save(os.path.join(app.config['UPLOAD_FOLDER'], secure_filename(f.filename)))archivo protegidoEs mejor almacenar datos locales en la carpeta de la instancia , no en la raíz del proyecto. Flask ya sabe dónde está eso. Solo asegúrese de crear primero el directorio de la instance .
instance import os from werkzeug.utils import secure_filename # create the folders when setting up your app os.makedirs(os.path.join(app.instance_path, 'htmlfi'), exist_ok=True) # when saving the file f.save(os.path.join(app.instance_path, 'htmlfi', secure_filename(f.filename)))No importa dónde decida guardarlo, debe asegurarse de que el usuario que ejecuta la aplicación tenga permiso de escritura en ese directorio. Si obtiene errores de permiso cuando ejecuta mod_wsgi, por ejemplo, el usuario suele ser httpd o www-data . Si obtiene un error de permiso denegado, verifíquelo.