Upload a file to a python flask server using curl
I have had quite a bit of issues getting this to work, so here is a very explicit solution:
Here we make a simple flask app that has two routes, one to test if the app works ("Hello World") and one to print the file name (To ensure we get a hold of the file).
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)
First we test if we can even contact the app:
curl http://localhost:6969
>Hello World
Now let us POST a file and get its filename. We refer to the file with "file=" as the "request.files['file']" refers to "file". Here we go to a directory with a file in it called "test.txt":
curl -X POST -F [email protected] http://localhost:6969/print_filename
>test.txt
Finally we want to use paths to files:
curl -X POST -F file=@"/path/to/my/file/test.txt" http://localhost:6969/print_filename
>test.txt
Now that we have confirmed that we can actually get a hold of the file, then you can do whatever with it that you want with standard Python code.
Your curl command means you're transmitting two form contents, one file called filedata
, and one form field called name
. So you can do this:
file = request.files['filedata'] # gives you a FileStorage
test = request.form['name'] # gives you the string 'Test'
but request.files['Test']
doesn't exist.