node+express 使用multer进行文件上传,并且以PM2启动时的错误

今天遇到的时很久以前遇到的问题,就是当我们直接npm run start 启动服务时,按照下面的代码操作时正常的 能够正常上传文件;

let storage = multer.diskStorage({
  //确定图片存储的位置
  destination: function (req, file, cb) {
    cb(null, './public/uploadImgs');
  },
  //确定图片存储时的名字,注意,如果使用原名,可能会造成再次上传同一张图片的时候的冲突
  filename: function (req, file, cb) {
    cb(null, 'upload_' + Date.now() + path.extname(file.originalname));
  },
});
//生成的专门处理上传的一个工具,可以传入storage、limits等配置
let upload = multer({ storage: storage });
//接收上传图片请求的接口
router.post('/upload', upload.single('file'), function (req, res, next) {
  //图片已经被放入到服务器里,且req也已经被upload中间件给处理好了(加上了file等信息)
  //线上的也就是服务器中的图片的绝对地址
  let domin = req.protocol + '://' + req.get('host');
  let url = domin + '/public/uploadImgs/' + req.file.filename;
  res.json({
    code: 200,
    // isOk: true,
    data: url,
  });
});

但是 当我们使用pm2启动服务时,则会报出以下错误

Error: ENOENT: no such file or directory, open 'public/upload/images/upload_1651661451274.jpg'

这个问题困扰了我俩小时  但是以前我时查到过解决办法的,

因为pm2启动时 是依据所在js脚本的位置去找到索要存放的位置

所以说要对存放位置进行修改 

比如我的js脚本位置是

D:\04-nodeproject\kexin-node\routes\api.js

而我的存放位置是

D:\04-nodeproject\kexin-node\public\upload\images

就要进行以下修改

destination: function (req, file, cb) {
    cb(null, './public/uploadImgs');
  },

修改后

destination: function (req, file, cb) {
    cb(null, '../public/uploadImgs');
  },

好的 我查了资料也没过多解释,我是今天进行学习才知道 唉

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值