En este tutorial vamos a realizar y conocer los métodos para poder subir archivos con Ptyhon y Flask a nuestro servidor.
En las aplicaciones web siempre nos encontramos con la necesidad de poder enviar archivos o subir archivos a nuestro servidor, para que eso suceda lo que se realiza es tomar el archivo desde el explorador y enviarlo para almacenar en nuestro servidor para que luego puedan ser accesibles a tus usuarios. Para esto utilizaremos Flask que nos va a ayudar a realizar esta tarea.
Bien la primera parte nos vamos a centrar con el formulario en HTML que vamos a generar a continuación.
Formulario de Subida de archivos.
Vamos a crear una plantilla básica en HTML para que pueda gestionar nuestros archivos, donde el usuario pueda elegir el archivo que desea enviar a nuestro servidor.
Hay que recordar que las plantillas serán todas renderizadas con Flask y deben encontrarse en una directorio llamado templates
Así que dentro del directorio templates creare mi archivo HTML con que vamos a trabajar:
<form action="/upload" method="POST" enctype="multipart/form-data"> <input type="file" name="archivo"> <input type="submit"> </form>
Como se pueden fijar es un formulario muy simple, que cuando le presionamos en enviar toda la información se va a enviar a upload con el método POST (los archivos no se pueden enviar con el método GET) también es muy importante mencionar el tipo de encriptación asi que debemos colocar multipart/form-data. Tambien tenemos el input que debemos colocar para que sea del tipo File para que se pueda generar el botón para poder seleccionar el archivo.
Perfecto ahora ya tenemos nuestra plantilla con HTML. Es muy simple. Es hora de escribir el script en Python.
Script para subir archivos al servidor con Python y Flask
Aquí viene la parte mas divertida el código, donde voy a explicar parte por parte de como funciona, para que notes no es difícil ni complicado entender la lógica que tiene detrás todo este procedimiento.
Lo primero que debemos realizar es importar todo lo que necesitamos para que esto se pueda ejecutar sin problemas, bien tenemos los primeros render_template, Flask, request, ya sabemos para que sirven cada uno de ellos. Y secure_filename
Ahora debemos crear un objeto con FLask y realizamos la configuración, en este caso app.config[‘UPLOAD_FOLDER’] lo único que hacemos aquí es especificar la carpeta donde deseamos guardar el archivo, pueden llamar de cualquier modo, también les recuerdo que si se encuentran en un ambiente de trabaja bajo Linux deben colocar los permisos suficientes de escritura por lo general 0775.
Lo siguiente es que debemos hacer es renderizar la plantilla, el formulario que mas arriba creamos para esto, ahora vamos a definir la ruta que va a ser enviada a través del método POST.
Lo siguientes es que el script accede al archivo desde el diccionario FILES en el objeto de solicitus request, obteniendo el nombre del archivo que el usuario desea enviar a nuestro servidor.
Aquí utilizamos el método save que mueve de la carpeta temporal al directorio final
El ultimo proceso es dar un retorno al usuario para que pueda saber si el archivo se subió correctamente en nuestro servidor
# Importamos todo lo necesario import os from flask import Flask, render_template, request from werkzeug import secure_filename # instancia del objeto Flask app = Flask(__name__) # Carpeta de subida app.config['UPLOAD_FOLDER'] = './Archivos PDF' @app.route("/") def upload_file(): # renderiamos la plantilla "formulario.html" return render_template('formulario.html') @app.route("/upload", methods=['POST']) def uploader(): if request.method == 'POST': # obtenemos el archivo del input "archivo" f = request.files['archivo'] filename = secure_filename(f.filename) # Guardamos el archivo en el directorio "Archivos PDF" f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) # Retornamos una respuesta satisfactoria return "<h1>Archivo subido exitosamente</h1>" if __name__ == '__main__': # Iniciamos la aplicación app.run(debug=True)