You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用NodeJS+Postman实现文件上传后删除源目录文件(剪切效果)

实现文件上传后的剪切/粘贴效果(删除源文件)

嘿,刚好能帮你搞定这个需求!要实现上传后删除源临时文件,其实只需要借助Node.js内置的fs模块,配合你的现有代码做几处修改就行,下面一步步来:

第一步:引入文件系统模块

首先在你的文件顶部引入fs.promises(因为你用了async/await,用Promise版本的API更贴合你的异步代码风格):

const fs = require('fs').promises;

第二步:修改上传逻辑,确保文件移动完成后再删除源文件

你原来的代码里avatar.mv()是异步操作,但没有等待它完成就直接执行后续逻辑,这样可能导致源文件还没移动完就被删除,或者删除时机不对。我们需要用await等待移动完成,再调用删除方法。

另外,注意你要删除的是临时文件的路径,也就是req.files.avatar.tempFilePath(你代码里已经打印过这个路径,确认是对的),用fs.unlink()方法来删除文件。

修改后的完整代码如下:

// 引入fs模块
const fs = require('fs').promises;

// Route for allows users to upload their profile pictures.
app.post('/upload-profile', async(req,res) =>{
  try {
    if(!req.files) {
      res.send({
        status:false,
        message: 'No file Uploaded'
      });
    } else {
      // Use the name of the input field to retrieve the uploaded file
      let avatar = req.files.avatar;
      console.log(req.files.avatar.tempFilePath);

      // 等待文件移动完成
      await avatar.mv('./uploads/' + avatar.name);

      // 删除源临时文件
      await fs.unlink(avatar.tempFilePath);

      //send response
      res.send({
        status:true,
        message: 'File is uploaded succesfully',
        data: {
          name: avatar.name,
          mimetype:avatar.mimetype,
          size:avatar.size,
          path: './uploads/' + avatar.name // 这里改成目标路径,原来的path是临时文件路径,现在返回上传后的实际路径更合理
        }
      });
    }
  }catch (err) {
    res.status(500).send(err);
  }
});

几个关键注意点:

  • 确保useTempFiles配置正确:你能拿到tempFilePath,说明你在配置express-fileupload时已经开启了useTempFiles: true,这个是必须的——如果没开,文件会存在内存里,就没有物理文件需要删除了。
  • 错误处理可选优化:如果删除临时文件时出错(比如文件已经被系统自动清理),会被外层的try/catch捕获返回500错误。你也可以给删除操作单独加try/catch,避免因为删除失败导致整个上传请求失败。
  • 路径修正:原来的data.path返回的是临时文件路径,上传完成后返回目标目录的路径,前端拿到的才是正确的文件访问路径。

这样修改后,上传文件就会实现真正的“剪切/粘贴”效果:文件从临时目录移动到你指定的./uploads目录,同时临时文件被删除。

内容的提问来源于stack exchange,提问作者AndroBack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:48:54