我想使用express框架上传多部分表单数据。我正在使用swagger-node表达我的API。现在,我已经在swagger YAML文件中写了以下文件来上传文件:
/picture/students:
# binds a127 app logic to a route
x-swagger-router-controller: bus_api
post:
description: Upload a picture
# used as the method name of the controller
operationId: uploadStudentPic
consumes:
- multipart/form-data
parameters:
- in: formData
name: imageFile
type: file
description: The file to upload.
required: true
responses:
"200":
description: OK
schema:
# a pointer to a definition
$ref: "#/definitions/SuccessResponseStr"
但现在我不知道如何使用它上传图片。是否有任何内置设施可以上传图片?
答案 0 :(得分:0)
尽管这是一个老问题,但是您如何才能做到这一点。我们在这里使用express-fileupload
npm模块,这使我们的生活更轻松。下面是一个简单的片段,用于将文件上传并保存到我们的服务器中,摇摇欲坠的Yaml保持不变。
//import the module
const fileUpload = require('express-fileupload');
// Add this in express setup
app.use(fileUpload());
// Your controller function, where you will get the file and store it as needed
function uploadStudentPic(req: any, res: any, next: any) {
var startup_image = req.files.imageFile;
var fileName = startup_image.name;
startup_image.mv(__dirname + '/images/' + fileName, function (err: any) {
if (err) {
res.status(500).send(err);
}
res.json({
"message": "File Uploaded"
});
});
}
注意:上面的代码仅用于一个简单的用例,您可能需要做一些 根据您的要求进行更多配置。如果你只是想 上传文件并将其存储在服务器上应该可以。
这里需要注意的重要一点是,swagger不必知道我们正在使用哪个模块,或者swagger也不必提供内置的工具来上传图像。
我们在声明API时正在做的事情,更具体地说是这些行...
parameters:
- in: formData
name: imageFile
type: file
description: The file to upload.
required: true
...指定上述POST API需要一个名为imageFile
的参数,该参数应该是文件,并且是该API起作用所必需的。而且,如果您在express&swagger-node配置中启用了swagger验证器中间件,我们的API将验证传入的请求,并在未上传文件的情况下以400 Bad Request
错误作为响应。
如果您要使用敏捷的中间件配置swagger-node
,swagger-tools
的示例配置,可以在我发布的this answer中找到一些详细信息(不好意思公开:P)