繁体   English   中英

Vue.js从Node.js res.sendFile加载图像

Vuejs load image from nodejs res.sendFile

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

在创建Vue的过程中,我使用axios连接到服务器以检索图像,如下所示:

created() {
    this.schoolID = localStorage.getItem('schoolID')
    console.log(this.schoolID)
    axios.get(process.env.MY_URL + '/public/logo', {
        params: {
            schoolID: this.schoolID
        }
    })
    .then(response => {
        this.logo = response.data
        console.log(this.logo)
    })
    .catch(e => {
        console.log(e.response)
        this.errors.push(e)
    })
},

我的nodejs将收到请求并发送响应,如下所示

router.get('/logo', function(req, res){
  School.findOne({ _id:  mongoose.mongo.ObjectId(req.query.schoolID) }).exec().then(function (data) {
    if (!data){
      console.log("error... no logo found for the given id: " + req.query.schoolID)
      return res.status(200).send({success: false, msg: 'No logo found.'});
    }else{
      res.sendFile(__dirname + '/uploads/' + data.logo);
    }
  });
});

我的图片应该加载到我的代码中

<img :src="this.logo">

我很肯定我正确地(至少是nodejs)图像文件,因为如果我只是在data.logo的末尾附加一些字符串,我的Vue和ENOENT: no such file or directory, stat 'D:\\web\\musleh-api\\uploads\\1542208727664_logo_sdam.png'中将出现404 not found错误ENOENT: no such file or directory, stat 'D:\\web\\musleh-api\\uploads\\1542208727664_logo_sdam.png'我的nodejs中的ENOENT: no such file or directory, stat 'D:\\web\\musleh-api\\uploads\\1542208727664_logo_sdam.png'错误

但是,没有图像被加载,如果我们尝试使用任何文本编辑器打开图像文件,我的console.log(this.logo)将显示有趣的符号,我认为这是图像文件。

我错过了什么?

2 个回复

我相信您需要做的是在HTML代码中执行此操作,假设您的图片是base64编码的:

<img alt="Awesome logo" :src="'data:image/png;base64,'+this.logo" />

这是来源

如上所述,加法似乎不起作用:

经过一些研究,我认为我们在这里并没有完全走错路,但是可以尝试一下:

在NodeJS方面,请尝试以下操作:

    }else{
      var img = fs.readFile('__dirname + '/uploads/' + data.logo', function (err, data) {
        var contentType = 'image/png';
        var base64 = Buffer.from(data).toString('base64');
        base64='data:image/png;base64,'+base64;
        res.send(base64);
      });
   });
});

然后像以前一样在VueJS中:

<img alt="Awesome logo" :src="this.logo" />

或简便的方法:

在NodeJS方面,请尝试以下操作:

    }else{
        // prefix your domain if your API serves to other domains
        res.send('/uploads/' + data.logo');
      });
   });
});

同样,这里的Vuejs代码仍然保持不变。

假设您要传递学校ID来请求图像,则不需要axios进行请求,可以直接将<img src>标记与动态参数一起使用以请求数据。 您还需要更改表达配置,以返回Content-Type:'image/png'或数据的MIME类型的Content-Type:'image/png'

然后在vue模板上,您需要将学校ID传递到动态路由,数据请求和处理将由img元素完成

<img :src="`/logo/${schoolID}">

router.get('/logo/:schoolID', function(req, res){
  School.findOne({ _id:  mongoose.mongo.ObjectId(req.params.schoolID) }).exec().then(function (data) {
    if (!data){
      console.log("error... no logo found for the given id: " + req.params.schoolID)
      return res.status(200)
                .send({success: false, msg: 'No logo found.'});
    }else{
      res.type('png') 
         .sendFile(__dirname + '/uploads/' + data.logo);
    }
  });
});
1 从 API 加载 vue.js 中的图像

考虑一下: API 加载图像元数据的清单。 图像有一个 ID,并通过另一个 API 调用从数据库返回一个 base64 图像。 清单的模型是attachmentRecord ,ID 只是一个字段。 我宁愿不将这些大字符串预加载到数组中(那会起作用)。 所以我有这个(在任何清单更改上延 ...

2 Vue.js/Nuxt.js 在 404 上加载回退图像

我正在尝试设置默认图像(占位符图像),以防找不到图像资源(404)。 我有一篇 dict 文章,其中有一个关键 author_image 的值。 所以该字符串不是空的,但它无法加载该图像。 在我的模板中: 在我的方法中: 我可以在控制台日志中看到调用了 setFallbackImageUr ...

3 沿vue.js加载其他脚本

我有一个正在工作的项目(asp核心),在女巫中,我决定添加一些vuejs逻辑。 当我将其添加到部分页面(不是全局布局)时,它运行良好。 现在,我决定将其移动到全局_Layout,如下所示: 我观察到之后,其他脚本无法正确加载(菜单未单击等) 问题出在哪里,vuejs是否会破坏现有脚本的加 ...

4 Vue.js如果图像存在

我是vuejs的新手,我有一个固定的部分可以搜索图像: 当我没有图像时this.UserImage返回字符串: data:image/jpeg;base64, 如果没有找到图像,我可以用来比较和使用v-if v-else显示一些默认图像吗? 我的尝试是: ...

2019-04-02 20:51:45 2 177   vuejs2
5 Vue.js导入图像

所以我正在制作一个带有控制面板的应用程序,我希望能够动态更改应用程序内的一些图像,但我的问题是,它根本无法工作 这是我要更改的div 这是Home.vue文件的脚本部分 我已经尝试了关于堆栈溢出的大多数建议,但似乎没有任何效果。 我使用默认的webpack配置和生成的结构 ...

7 为vue.js组件加载多个局部

如果组件文件是通过browserify和require()加载/使用的,则可以从该组件文件中加载vuejs组件的部分组件吗? 我有一个使用通用组件的视图...但是显示该组件的方式特定于该一个视图(系统中所有“用户”的列表)。 user.js: users-view.js: ...

8 我可以从生产中的CDN加载Vue.js吗?

我为一个新项目选择了Vue.js,因为它似乎在浏览器中本地运行,而不是像React那样必须通过Node编译/转换。 有什么理由我不能在我的生产代码中链接到这样的CDN吗? 一位同事认为,这可能只是为了开发,而且只是在运行中进行简单的转换(这听起来不太好)。 但除此之外它似乎工作正常。 ...

9 在 Vue.js 中加载节点库

首先,我正在使用 Vue 2 + Firebase 技术自学 Web Apps。 对假人的解释将不胜感激。 我正在尝试在我的前端列出来自 Cloud Storage (Google Cloud Platform) 的存储桶。 所以我找到了一个节点库来完成这个任务。 我创建了一个 Vue 组件来列出 ...

10 Vue.js 基于子域加载 CSS

我有一个使用 Vue cli 3 制作的 Vue js 应用程序。我在我的项目中使用了 sass loader 和 node-sass。 如果我有多个子域用于相同的代码,例如site1.mysite.com和site2.mysite.com ,我如何根据子域加载不同的 css 文件? 我已经在文 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM