如何在Flask-RESTful PUT处理程序方法中使用curl命令(如curl localhost:5000/upload/test.bin --upload-file tmp/test.bin
)保存上传的数据?
Ron Harlev's answer到Flask-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
,但我仍然没有回答我的问题。
答案 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)