【问题标题】:nodejs multer file upload, path contains double slashesnodejs multer文件上传,路径包含双斜杠
【发布时间】:2017-09-29 19:54:21
【问题描述】:

我正在通过 nodejs 和 multer 模块上传图片,这是我正在使用的代码:

app.post('/upload', upload.single('file'), function(req, res, next) {
    var tmp_path = req.file.path,
        target_path = __dirname + '/public/uploads/' + req.file.originalname,

        src = fs.createReadStream(tmp_path),
        dest = fs.createWriteStream(target_path);

    src.pipe(dest);
    fs.unlink(tmp_path); //deleting the tmp_path

    src.on('end', function() {
        res.json({
            success: true,
            file: '/uploads/' + req.file.originalname
        });
    });

    src.on('error', function(err) {
        console.log('err', err);
        res.json({
            success: false
        });
    });
});

问题是有时(随机发生)错误回调被触发,内容如下:

所以看起来像在路径中添加了额外的斜杠导致脚本找不到临时位置并返回错误,也许有人遇到了这个问题并可以提供帮助;)

【问题讨论】:

  • 实际字符串中没有双斜杠。您看到的是 string literal 版本,因为显示的对象被传递给util.inspect(),它以这种方式格式化字符串值。以这种方式显示文字版本的一个优点是它可以让您更轻松地查看控制字符(例如 \n、\t 等)。您也可以在代码中按原样复制和粘贴它,它无需修改即可工作。
  • 此外,你应该永远使用originalname(至少按原样——如果你真的想要/需要的话,你可以散列我想的名字)因为那是客户端提供的值,可能包含恶意字符以诱骗您覆盖敏感/重要文件。
  • 问题是什么?

标签: node.js fs multer


【解决方案1】:

您可以使用以下代码来消除此错误...

尝试:- path.replace("\\","/");

这肯定会解决你的问题。

【讨论】:

    【解决方案2】:

    尝试在发送成功消息后运行取消链接,管道是异步的,因此可能在删除后执行。

     src.on('end', function() {
            res.json({
                success: true,
                file: '/uploads/' + req.file.originalname
            });
            fs.unlink(tmp_path)
        });
    

    【讨论】:

      猜你喜欢
      • 2021-03-08
      • 2021-12-27
      • 1970-01-01
      • 2019-07-13
      • 1970-01-01
      • 2020-11-20
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多