当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 如何使用swagger-express-mw和express上传文件?

来源:互联网 收集:自由互联 发布时间:2021-06-16
我想使用express框架上传多部分表单数据.我正在使用 swagger-node with express for my API.现在,我已经在swagger YAML文件中写了以下文件来上传文件: /picture/students: # binds a127 app logic to a route x-sw
我想使用express框架上传多部分表单数据.我正在使用 swagger-node with express for my 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"

但现在我不知道如何使用它上传图像.是否有任何内置的设施上传图像?

虽然这是一个老问题,但你是如何做到的.我们在这里使用了express-fileupload npm模块,这使我们的生活更轻松.下面是一个简单的片段,用于上传文件并将文件保存到我们的服务器,swagger 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"
     });
   });
 }

note: The above code is for a single & simple use case, you may need to do some
more configurations based on your requirements. If you simply want to
upload a file and store it on the server this should work.

这里需要注意的一点很重要,swagger不必知道我们正在使用哪个模块,或者swagger也没有提供内置工具来上传图像.

我们在问题中声明我们的API,更具体地说是这些行…

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

…指定上面的POST API需要一个名为imageFile的参数,该参数应该是一个文件,并且此API需要它才能运行.如果您的Express& amp;中启用了swagger验证器中间件swagger-node配置,我们的API将验证传入的请求,并在文件未上传时响应400 Bad Request错误.

如果你想要一个带有swagger express中间件的swagger-node,swagger-tools的示例配置,你可以在我发布的this answer中找到一些细节(抱歉宣传:P)

网友评论