Swagger NodeJS文件上传

时间:2016-08-19 15:49:09

标签: node.js file-upload swagger postman cloudinary

解决方案: 在我的招摇合同中出现错误,文件上载的正确定义应如下所示:

  parameters:
   - in: formData
     name: file
     description: The file to upload
     required: true
     type: file

谢谢您的提示!

原始问题:

我的Swagger / NodeJS API存在问题。

我想接收文件上传并将检索到的文件与另一个云服务一起存储。

可悲的是,该文件没有以我期望的格式到达。 这是我通过邮递员在 req.swagger.params.image.value 中收到的内容:

    ------WebKitFormBoundaryZCFoUQnf4lHIhzjj
Content-Disposition: form-data; name="image"; filename="r14kvzvmsh3xnuyl2vq8.png"
Content-Type: image/png

�PNG

IHD�o&�IDA�c���?� � ��1��X��5�юIEND�B`�
------WebKitFormBoundaryZCFoUQnf4lHIhzjj--

测试图像as a PNG或base64:

iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==

我的图片云提供商是cloudinary,所以当我使用以下代码时,它会成功保存到服务中。

cloudinary.v2.uploader.upload("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==")

当我使用

new Buffer(req.swagger.params.image.value, 'binary').toString('base64');

我希望将文件转换为base64,但我认为定义Content-Type等的req中的部分也会被转换。

有没有人知道使用fileuploads和swagger的方法,所以我可以将图像成功上传到cloudinary?

正则表达式似乎非常“hacky”......

这是我招摇合同中的图像上传部分:

/imageUpload:
x-swagger-router-controller: image_upload
post:
  description: Endpoint to upload the image file. The image has to be uploaded before the shipment is created, a response will be the image ID that has to be supplied to the shipment. If the image ID is not valid, i.e. not known to this api, the shipment can not be created
  operationId: storeImage
  consumes:
    - multipart/form-data
    - application/x-www-form-urlencoded
    - binary
  parameters:
   - in: body
     name: image
     description: The file to upload
     required: true
     schema:
        type: string
        format: file
  responses:
    "200":
      description: Success
      schema:
        # a pointer to a definition
        $ref: "#/definitions/ImageResponse"
    # responses may fall through to errors
    default:
      description: Error
      schema:
        $ref: "#/definitions/ErrorResponse"

2 个答案:

答案 0 :(得分:0)

在我看来,您正在上传原始二进制图像而不是base64编码图像。我不再使用所有二进制文件,只在swagger文档中定义base64,并确保Buffer-> base64编码按预期工作(执行某些控制台日志记录)。

答案 1 :(得分:0)

2021 年更新:

Swagger 不允许使用上述方法上传文件。 consumes 字段不再存在。

新版本是这样的:

  requestBody:
    content:
      multipart/form-data:
        schema:
          type: object
          properties:
            fileName:
              type: string
              format: binary