Transfer a file to httpserver via POST command from curl

Karthik Sharma karthik.sharma at gmail.com
Thu Dec 12 08:47:32 EST 2019


I have written a python server app (actually copied from somewhere) using
Flask, that I want to act as a http server. I expect this server to recieve
a POST command (of a file) from CURL and save that file on the server. And
I should be able to download that file when required.

My python scripts are shown below.

app.py



from flask import Flask

UPLOAD_FOLDER = 'home/user/uploads'

app = Flask(__name__)
#app.secret_key = "secret key"
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024


main.py


import os
import urllib.request
from app import app
from flask import Flask, request, redirect, jsonify
from werkzeug.utils import secure_filename


ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])


def allowed_file(filename):
 return '.' in filename and filename.rsplit('.', 1)[1].lower() in
 ALLOWED_EXTENSIONS


@app.route('/file-upload', methods=['POST'])
def upload_file():
 # check if the post request has the file part
 if 'file' not in request.files:
 resp = jsonify({'message' : 'No file part in the request'})
 resp.status_code = 400
 return resp
 file = request.files['file']
 if file.filename == '':
 resp = jsonify({'message' : 'No file selected for uploading'})
 resp.status_code = 400
 return resp
 if file and allowed_file(file.filename):
 filename = secure_filename(file.filename)
 file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
 resp = jsonify({'message' : 'File successfully uploaded'})
 resp.status_code = 201
 return resp
 else:
 resp = jsonify({'message' : 'Allowed file types are txt, pdf, png, jpg,
jpeg, gif'})
 resp.status_code = 400
 return resp


if __name__ == "__main__":
    app.run()

I am doing a POST using curl as follows.

curl -X POST --data-binary @/home/user/testfile.txt http://
127.0.0.1:5000/file-upload

Is it really possible to transfer a large binary file from my machine to
the above httpserver via POST command and download it again? If yes, is the
above Flask app enough for that and what am I doing wrong?

Kindly Reply,
Regards,
Karthik.


I am getting 400 Bad Request error from the server. I am new to Flask.
What am I doing wrong. Is it possible to transfer a binary file
(large) from my computer to the above http server via POST command.?
For that purpose is my above code enought? What am I doing wrong?


More information about the Python-list mailing list