如何在Flask-RESTful中解析curl PUT请求?

时间:2017-05-10 00:11:58

标签: python curl flask put flask-restful

如何在Flask-RESTful PUT处理程序方法中使用curl命令(如curl localhost:5000/upload/test.bin --upload-file tmp/test.bin)保存上传的数据?

Ron Harlev's answerFlask-RESTful - Upload image中的代码适用于来自curl -F "file=@tmp/test.bin" localhost:5000/upload/test.bin的POST请求(稍微修改如下):

def post(self, filepath):
    parse = reqparse.RequestParser()
    parse.add_argument('file', type=werkzeug.datastructures.FileStorage, location='files')
    args = parse.parse_args()
    upload_file = args['file']
    upload_file.save("/usr/tmp/{}".format(filepath))
    return ({'filepath': filepath}, 200)

但是,如果我尝试使用代码处理来自curl --upload-file的PUT请求(当然正在将post更改为put),我会得到:"&#39 ; NoneType'对象没有属性' save'"。这是指上面代码中的倒数第二行。

如何处理使用curl --upload-file上传的文件数据,以便将其保存到本地文件?

更新:这可以解决问题:curl --request PUT -F "file=@tmp/test.bin" localhost:5000/upload/test.bin,但我仍然没有回答我的问题。

1 个答案:

答案 0 :(得分:0)

卷曲文档将--upload-file定义为PUT http请求https://curl.haxx.se/docs/manpage.html#-T

我不确定是否需要通过一个宁静的API处理此问题,而且我很确定那是卷曲导致问题的原因,也许是必须通过flask-restful做到这一点的假设阻止了您?

也许可以尝试将其构建为香草烧瓶终点,该代码应该对您有用。

from flask import Flask, request, jsonify
...

@app.route('/simpleupload/<string:filepath>', methods=['POST','PUT'])
def flask_upload(filepath):
    with open("/tmp/{}".format(filepath), 'wb') as file:
        file.write(request.stream.read()) 
    return (jsonify({'filepath': filepath}), 200)