当前位置: 首页 > 知识库问答 >
问题:

Multer:文件路径不对

蔚俊人
2023-03-14

我将multer添加到我的node js应用程序中,它工作得很好,只是我需要存储在db中的图像的路径不正确。找不到问题所在,显然是我犯了个愚蠢的错误。

这是我为multer做的准备

const multer = require('multer');

const storage = multer.diskStorage({
  destination: './public/images',
  filename: function(req, file, next){
      next(null, Date.now() + '-' + file.originalname);
  }
});

const upload = multer({ storage: storage});

下面是我如何使用它来存储路径

router.post('/add', upload.single('myImage'), function(req, res){
  req.checkBody('title','Title is required').notEmpty();
  //req.checkBody('author','Author is required').notEmpty();
  req.checkBody('body','Body is required').notEmpty();

  // Get Errors
  let errors = req.validationErrors();

  if(errors){
    res.render('add_article', {
      title:'Add Article',
      errors:errors
    });
  } else {
    let article = new Article();
    //var date = new Date();
    article.title = req.body.title;
    article.author = req.user._id;
    article.body = req.body.body;
    article.descript = req.body.descript;
    article.category = req.body.category;  
    article.date = getDate();
    article.time = getTime();
    article.comments = 0;   
    article.img = req.file.path;   
    console.log(req.file);
    article.save(function(err){
      if(err){
        console.log(err);
        return;
      } else {
        req.flash('success','Article Added');
        res.redirect('/');
      }
    });
  }
});

你可以从这里看到路径不对,我不能在GET上使用它

{ _id: 5bd993756373a5182460aa2a,
  title: 'Sport 5',
  author: '5acab056708e0d1248cba6ed',
  body: 'sadddddddddddddd213',
  descript: 'dsadas',
  category: 'sport',
  date: '2018/10/31',
  time: '12:35',
  comments: 0,
  img: 'public\\images\\1540985717747-nike_logo_slogan_sport_advertising_42643_1280x1024.jpg',
  __v: 0 }

共有2个答案

叶琦
2023-03-14

这种情况发生在windows中,因为windows中的任何文件路径都只有后斜杠,但要通过url访问文件,必须有前斜杠。所以只需使用下面的代码将所有反斜杠转换为前斜杠

常量imageUrl=req.file.path.replace(“\”,“/”);

邓毅
2023-03-14

Multer在您的端工作正常,您只需要将系统路径转换为一个url可访问的路径。

这个对你有帮助。

article.comments = 0;
let fileUrl = req.file.path.replace(/\\/g, "/").substring("public".length);
article.img = fileUrl;
 类似资料:
  • 问题内容: 你如何grep只返回匹配的行?即结果中省略了路径/文件名。 在这种情况下,我想查看当前目录中的所有.bar文件,并搜索FOO。 问题答案: 没必要。如果您只是在特定目录中寻找模式,就足够了: 隐藏文件名的参数在哪里,例如: -h,–no-文件名 在输出中禁止文件名的前缀。当仅搜索一个文件(或仅标准输入)时,这是默认设置。 请注意,您使用的是 -H,–with-filename 打印每个

  • 问题内容: 我希望我的Web应用程序使用以下路径登录文件:webapp / logs / 我可以在log4j.properties文件中设置绝对路径,但是生产环境的目录结构将有所不同。有什么办法可以做到吗? 这是我的方法: 这是将日志打印到我的eclipse目录(c:// eclipse)中名为log.log的文件中。我正在使用Tomcat 6。 问题答案: log4j能够扩展系统属性,因此,如果

  • 问题内容: 我正在使用python进行文件操作。 我有一个文件路径为: 当我使用python打开文件时,它说: 但是,该文件存在于驱动器上。 可能是因为窗口包含空格,所以无法正确获取“ SEM 2”。 如何在窗口路径的路径中处理此类空格? 问题答案: 路径中的空格没有问题,因为您没有使用“外壳”来打开文件。这是Windows控制台上的一个会话来证明这一点。你做错了什么

  • 我在intellij中有一个Java/Maven项目,文件结构如下: 下面一行给我错误“包名'test.java.princ'不对应文件路径'princ'” 事实上,它对我项目中的每个文件都这样做。 我所尝试的: 使用maven重建 使用intellij或mvn命令,构建工作正常。

  • 问题内容: 所以这是我的程序,可以正常工作: 如您所见,我正在使用我要读取的文件的绝对路径: 当我尝试使用相对路径时会出现问题: 我收到一个错误: 文件usnumbers.txt与ScanSum.class文件位于同一目录中: 我该如何解决? 问题答案: 从哪个目录执行该类文件?(这将是相对路径的当前工作目录和基本目录。) 如果仅从eclipse启动应用程序,则项目目录将是工作目录,在这种情况下,

  • V1.1.1新增 sp_asset_relative_url($asset_url) 功能: 获取文件相对路径 参数: $asset_url:文件URL 返回 类型字符串,带协议的绝对地址直接返回原来的值,否则会转化为相对于系统upload 目录的文件路径 实例 <?php $file='/data/upload/1.png';//文件路径 $path=sp_asset_relative_url