Как загрузить файл в Flask RESTful с помощью cURL?

Я написал следующее Resource:

from config import AWS_S3_BUCKET
from flask_api import status
from flask_restful import Resource, reqparse
from werkzeug.datastructures import FileStorage
from werkzeug.utils import secure_filename
import helpers


class FileUpload(Resource):

    def post(self):
        parse = reqparse.RequestParser()
        parse.add_argument('user_file', type=FileStorage, location='user_file')
        parse.add_argument('user_id', type=int, location='user_id')
        args = parse.parse_args()
        file = args['user_file']
        if file:
            file.filename = secure_filename(file.filename)
            url = helpers.upload_file_to_s3(file, AWS_S3_BUCKET)
            return {'url': url}, status.HTTP_201_CREATED

        return 'Invalid file', status.HTTP_400_BAD_REQUEST

После того, как я пытаюсь загрузить свой файл в cURL с помощью этой команды:

curl -F '[email protected]' -F 'user_id=5' http://127.0.0.1:5000/files/new

В отладчике вызывается конечная точка, но все поля: user_file и user_id равны NoneType.
Что я делаю не так?
P.S. Файл recovery.fstab находится в каталоге home.


person Шах    schedule 08.04.2018    source источник


Ответы (1)


См. документацию flask-RESTful.

Аргумент Location — это место, откуда парсер req получает значения.

def post(self):
    parse = reqparse.RequestParser()
    parse.add_argument('user_file', type=FileStorage, location='files')
    parse.add_argument('user_id', type=int, location='args')
    ...
person YB Yu    schedule 09.04.2018