【发布时间】: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(至少按原样——如果你真的想要/需要的话,你可以散列我想的名字)因为那是客户端提供的值,可能包含恶意字符以诱骗您覆盖敏感/重要文件。 -
问题是什么?