Python restplus API to upload and dowload files
11,065
First you need to configure a parser
# parsers.py
import werkzeug
from flask_restplus import reqparse
file_upload = reqparse.RequestParser()
file_upload.add_argument('xls_file',
type=werkzeug.datastructures.FileStorage,
location='files',
required=True,
help='XLS file')
Then add a new resource to your api namespace
# api.py
import …
import parsers
@api.route('/upload/')
class my_file_upload(Resource):
@api.expect(parsers.file_upload)
def post(self):
args = parsers.file_upload.parse_args()
if args['xls_file'].mimetype == 'application/xls':
destination = os.path.join(current_app.config.get('DATA_FOLDER'), 'medias/')
if not os.path.exists(destination):
os.makedirs(destination)
xls_file = '%s%s' % (destination, 'custom_file_name.xls')
args['xls_file'].save(xls_file)
else:
abort(404)
return {'status': 'Done'}
I hope this helps.
Author by
user3313834
Updated on June 15, 2022Comments
-
user3313834 almost 2 years
With python flask_restplus what is correct way to have a post and get methods to get and push a file e.g. xlsx to the server ?
Does the marshaling need to be used for this ?
reference: https://philsturgeon.uk/api/2016/01/04/http-rest-api-file-uploads/
This answer give general info but not in the python>flask>restplus context: REST API File Upload
-
MichalMazurek over 7 yearsTo do it in a restful way I think you should first create a file object so:
POST /api/v1/file {"meta": "some data"}
then you receive file object so:{"meta": "some data", "created_time": "timestamp", "id": 1}
, then you add the attachment using PUT with the binary of file so:PUT /api/v1/file/1/attachment
-
MichalMazurek over 7 yearsPUT or POST if you are doing it with simple html form
-
balu about 6 years@samurai I agree that this would usually be the way to go. The problem with this approach, though, is that Flask-RESTPlus doesn't support passing the binary blob as request body directly (nor does Swagger 2.0). Instead one has to resort to using the form data approach k3z suggested in his answer – at least if one wishes to describe the file upload API (and in particular the expected
Content-Type
for requests) using Swagger.