繁体   English   中英

如何在Flask Restagger中上传文件

[英]How to upload file in flask restful swagger

我想在烧瓶restful swagger api中上传一个json文件,这是我的参数

  parameters=[
      {
            "name": "filename",
            "description": "json file upload ",
            "required": True,
            "allowMultiple": False,
            "dataType": "file",
            "paramType": "body"
        }

我用

解析器= reqparse.RequestParser()

parser.add_argument('filename',type = str,location ='args')

args = parser.parse_args()

打印(args.filename)

要获取上传的文件名,我将其打印出来,但是没有。

如何在Flask Restful摇摇API中上传文件?

非常感谢!

有点晚了,但是...

您需要在swagger.yaml API规范文件中编辑端点定义,例如:

paths:
  '/your/api/upload':
    post:
      summary: Upload a file.
      operationId: postFile
      consumes:
        - multipart/form-data
      produces:
        - application/json
      parameters:
        - in: formData
          name: file # change it to your parameter name
          required: true
          type: file
          description: Stream to write to filesystem
        # other optional form parameters, e.g. ...
        - in: formData
          name: offset
          type: integer
          description: Bytes to skip at the beginning of the file

之后,您可以自动生成Python控制器,例如使用Swagger Editor的内置函数。

参考: Swagger 2.0文档

我已经解决了这个问题,在这里写:

更改

parser.add_argument('filename',type = str,location ='args')

parser.add_argument('filename',type = werkzeug.datastructures.FileStorage,location ='files')

但您需要先导入werkzeug

那么您可以使用werkzeug.datastructures.FileStorage类的方法

可以从http://werkzeug.pocoo.org/docs/0.12/datastructures/使用它

文件= args.filename

filename = file.filename#上传文件名

file.save(savePaths)#您可以将文件保存到要保存的路径#但请记住savePaths包含文件的文件名

或者,您可以使用以下方法保存文件:

行数= file.read()#bytes类

f = open(filename,“ wb”)#新建一个文件并为其提供文件名

f.write(lines)#write字节

f.close()

现在:parameters = [{“ name”:“ filename”,“ description”:“ dd”,“ required”:True,“ allowMultiple”:False,“ dataType”:'file',“ paramType”:“ body” }]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM