nodejs multer文件上传,路径包含双斜杠

Posted

技术标签:

【中文标题】nodejs multer文件上传,路径包含双斜杠【英文标题】:nodejs multer file upload, path contains double slashes 【发布时间】: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(至少按原样——如果你真的想要/需要的话,你可以散列我想的名字)因为那是客户端提供的值,可能包含恶意字符以诱骗您覆盖敏感/重要文件。 问题是什么? 【参考方案1】:

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

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

这肯定会解决你的问题。

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于nodejs multer文件上传,路径包含双斜杠的主要内容,如果未能解决你的问题,请参考以下文章

nodejs Multer中间件

nodejs + multer + angularjs 无需重定向即可上传

使用 nodejs、multer 和 cloudinary 上传大型视频文件

Nodejs进阶:基于express+multer的文件上传

nodeJs学习-08 multer中间件,解析post文件,上传文件

nodejs+multer+ajax文件上传