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

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 filedata=@SomeFile.pdf "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

  400 Bad Request 

Bad Request

The browser (or proxy) sent a request that this server could not understand.

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.

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

    Aquí creamos una aplicación de flask simple que tiene dos rutas, una para probar si la aplicación funciona (“Hello World”) y otra para imprimir el nombre del archivo (para garantizar 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 file=@test.txt 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 realmente podemos obtener una retención del archivo, entonces puede hacer lo que quiera con el código estándar de Python.