学数学的程序猿
数学 / 前端开发 / 算法About me
使用formidable来处理文件上传
前端
2023-02-15 13:38:10

在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