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.