开启掘金成长之旅!这是我参与「掘金日新计划 · 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.使用path
和fs
对文件进行位置更改:
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进行调试:
/api/users/upload
是在main.js中对路由进行了统一前缀
//mian.js
router.use('/api/users'/upload)
body类型选择form-data,key类型选择file。