restful jsonify example python curl flask

jsonify - Subir un archivo a un servidor de matraz de Python usando curl



flask restful example (2)

He tenido algunos problemas para que esto funcione, así que aquí hay una solución muy explícita:

Aquí creamos una aplicación de frasco simple que tiene dos rutas, una para probar si la aplicación funciona ("Hello World") y otra para imprimir el nombre del archivo (para asegurarnos de que obtengamos una retención del archivo).

from flask import Flask, request from werkzeug.utils import secure_filename app = Flask(__name__) @app.route("/") def hello_world(): return "Hello World" @app.route("/print_filename", methods=[''POST'',''PUT'']) def print_filename(): file = request.files[''file''] filename=secure_filename(file.filename) return filename if __name__=="__main__": app.run(port=6969, debug=True)

Primero probamos si podemos contactar la aplicación:

curl http://localhost:6969 >Hello World

Ahora pongamos un archivo en POST y obtengamos su nombre de archivo. Nos referimos al archivo con "file =" como "request.files [''file'']" se refiere a "file". Aquí vamos a un directorio con un archivo llamado "test.txt":

curl -X POST -F [email protected] http://localhost:6969/print_filename >test.txt

Finalmente queremos usar rutas a los archivos:

curl -X POST -F file=@"/path/to/my/file/test.txt" http://localhost:6969/print_filename >test.txt

Ahora que hemos confirmado que podemos obtener el archivo, podemos hacer lo que quieras con el código estándar de Python.

Estoy tratando de cargar un archivo a un servidor usando un matraz de curl y python. A continuación tengo el código de cómo lo he implementado. Cualquier idea sobre lo que estoy haciendo mal.

curl -i -X PUT -F name=Test -F [email protected] "http://localhost:5000/" @app.route("/", methods=[''POST'',''PUT'']) def hello(): file = request.files[''Test''] if file and allowed_file(file.filename): filename=secure_filename(file.filename) print filename return "Success"

El siguiente es el error que el servidor devuelve

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <title>400 Bad Request</title> <h1>Bad Request</h1> <p>The browser (or proxy) sent a request that this server could not understand.</p>

Gracias por adelantado.


Su comando curl significa que está transmitiendo dos contenidos de formulario, un archivo llamado filedata y un campo de formulario llamado name . Así que puedes hacer esto:

file = request.files[''filedata''] # gives you a FileStorage test = request.form[''name''] # gives you the string ''Test''

pero request.files[''Test''] no existe.