解决方案: 在我的招摇合同中出现错误,文件上载的正确定义应如下所示:
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"
答案 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