全栈之旅:NodeJs 进阶 - 文件上传

67 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

NodeJs 进阶 - 文件上传

近日学习nodejs,使用express进行一个后台的简单搭建,正常请求都已完成。但上传文件碰到了些问题,所以记录下。起初,我认为文件上传后接口req中拿到的是buffer,所以想直接writeFile直接写入,但还是不行。面向百度后,发现使用multiparty文件直接存入本地了,再使用fs.rename将文件转入自己的文件目录就好了。

使用的模块有:express,multiparty,path,fs

1.使用路由进行接口搭建:

router.post('/upload',(req,res)=>{
//req:客户请求
//res:服务器响应
})

2.使用multiparty进行文件独写:

router.post('/upload',(req,res)=>{
  let form = new multiparty.Form();
  form.parse(req, function (err, fields, files) {
    // 这里的files是接收到的文件列表,相当于FileList
    // 对于上传单个文件,取数组里面的第一项 
  });
})

3.使用pathfs对文件进行位置更改:

router.post("/upload", (req, res) => {
  let form = new multiparty.Form();
  form.parse(req, function (err, fields, files) {
    // 这里的files是接收到的文件列表,相当于FileList
    // 对于上传单个文件,取数组里面的第一项
    let file = Object.values(files)[0][0];
    let filePath = path.join(
      __dirname,
      "../../files/upload/",
      file.originalFilename
    );
    fs.rename(file.path, filePath, (err) => {
      if (err) throw err;
      console.log("文件改写完成");
    });
    res.send({ path: filePath });
  });
});

4.使用postman进行调试:

image.png

/api/users/upload 是在main.js中对路由进行了统一前缀

//mian.js
router.use('/api/users'/upload)

body类型选择form-data,key类型选择file。