Node.js nodejs multer文件上载,路径包含双斜杠
我正在通过nodejs和multer模块上传图像,这是我使用的代码:Node.js nodejs multer文件上载,路径包含双斜杠,node.js,fs,multer,Node.js,Fs,Multer,我正在通过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.createReadStrea
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
});
});
});
问题是,有时(随机发生)会触发错误回调,内容如下:
因此,看起来路径中添加了额外的斜杠,导致脚本找不到临时位置并返回错误,可能有人遇到了此问题,可以提供帮助;) 在发送成功消息后尝试运行取消链接,管道是异步的,因此可能在删除之后执行
src.on('end', function() {
res.json({
success: true,
file: '/uploads/' + req.file.originalname
});
fs.unlink(tmp_path)
});
在发送成功消息后尝试运行取消链接,管道是异步的,因此可能在删除后执行
src.on('end', function() {
res.json({
success: true,
file: '/uploads/' + req.file.originalname
});
fs.unlink(tmp_path)
});
您可以使用以下代码来消除此错误 try:-path.replace(“\\”,“/”)
这肯定会解决您的问题。您可以使用以下代码来消除此错误 try:-path.replace(“\\”,“/”)
这肯定会解决您的问题。实际字符串中没有双斜杠。您看到的是字符串文本版本,因为所显示的对象被传递到
util.inspect()
,它以这种方式格式化字符串值。以这种方式显示文字版本的一个优点是,它允许您更容易地查看控制字符(例如。\n、\t等)。您也可以按代码中的原样复制和粘贴它,它只会工作,无需修改。此外,您不应该使用原始名称(至少按原样--如果您真的想/需要,您可以将名称散列)因为这是客户端提供的值,可能包含恶意字符以欺骗您覆盖敏感/重要文件。问题是什么?实际字符串中没有双斜杠。您看到的是字符串文本版本,因为所显示的对象被传递到util.inspect()
,它以这种方式格式化字符串值。以这种方式显示文字版本的一个优点是,它允许您更容易地查看控制字符(例如。\n、\t等)。您也可以按代码中的原样复制和粘贴它,它只会工作,无需修改。此外,您不应该使用原始名称(至少按原样--如果您真的想/需要,您可以将名称散列)因为这是客户端提供的值,可能包含恶意字符以欺骗您覆盖敏感/重要文件。问题是什么?