如何使用cURL在Flask RESTful中上传文件?附已编写的Resource代码
用cURL上传文件到你的Flask RESTful接口
嘿,我来帮你搞定这个文件上传的事儿!首先咱们先把你的FileUpload资源类里的小问题修正下,再给你对应的cURL命令。
第一步:修正参数解析的Location
看你代码里的reqparse配置,location参数写得有点问题,这会导致参数解析失败。咱们调整一下:
parse = reqparse.RequestParser() # 文件参数要从files里取,对应multipart/form-data里的文件字段 parse.add_argument('user_file', type=FileStorage, location='files', required=True) # user_id是普通表单参数,从form里取 parse.add_argument('user_id', type=int, location='form', required=True) args = parse.parse_args()
这样调整后,Flask才能正确识别你用cURL发送的文件和ID参数。
第二步:cURL上传命令
假设你的API端点注册的是/upload,本地运行地址是http://localhost:5000,那对应的cURL命令是这样的:
curl -X POST -F "user_file=@/绝对路径/到你的/测试文件.png" -F "user_id=456" http://localhost:5000/upload
我给你拆解下每个部分:
-X POST:明确告诉服务器这是POST请求-F "user_file=@/xxx/xxx.file":@后面跟着你本地要上传的文件的绝对路径,这个字段名user_file要和你接口里的参数名完全一致-F "user_id=456":传递你的用户ID,这里直接写整数就行,reqparse会自动帮你转成int类型- 最后是你的API端点URL,记得替换成你实际部署的地址
额外注意点
- 确保你已经把
FileUpload资源正确注册到Flask API里了,比如:from flask import Flask from flask_restful import Api from your_file import FileUpload app = Flask(__name__) api = Api(app) # 注册路由,这里的/upload就是你要访问的端点 api.add_resource(FileUpload, '/upload') if __name__ == '__main__': app.run(debug=True) - 如果你在
post方法里处理文件(比如上传到S3),记得用secure_filename()处理文件名,避免安全问题,就像你代码里写的那样~
内容的提问来源于stack exchange,提问作者Denis Steinman
相关产品推荐
相关产品推荐

