如何使用cURL在Flask RESTful中上传文件?

时间:2018-04-08 21:53:00

标签: python python-3.x curl flask-restful

我写了下一个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 'user_file=@recovery.fstab' -F 'user_id=5' http://127.0.0.1:5000/files/new

在调试器中调用端点,但所有字段:user_fileuser_id都是NoneType
我做错了什么?
P.S。 recovery.fstab文件位于home目录中。

1 个答案:

答案 0 :(得分:1)

请参阅flask-RESTful docs

位置参数是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')
    ...