在next.js后端服务中,上传文件接口获取到的body(req.body)为字符串,可以使用formidable库来快速处理文件上传的需求。
安装
npm install formidable
如使用typescript,需安装其函数声明
npm install @types/formidable
使用
首先创建IncomingForm对象
const form = new formidable.IncomingForm();
然后在API函数中使用,它会将文件上传到一个缓存目录,上传后的文件在回调函数的files参数中
/*
* req为Request对象,在next.js中为NextApiRequest
* 回调函数中files为上传后的文件 Files类型同File | File[]
*/
form.parse(req, (err: Error, fields: Fields, files: Files) => {
//单个文件的话使用files.file获取
let file = files.file as File;
//获取缓存文件的路径
let tmpFilePath = file.filepath;
//使用fs的rename函数将其移动到目标路径
let targetFilePath = ''; //目标文件
fs.renameSync(tmpFilePath, targetFilePath)
//或者使用fs-extra中的move/moveSync函数亦可
});
创建IncomingForm对象时可选opyions,具体的内容参见其文档
const form = new formidable.IncomingForm(options);
formidable开源地址:https://github.com/node-formidable/formidable