简体   繁体   English

如何使用Vuejs在html中显示mysql blob图像?

[英]How to display mysql blob image in html using Vuejs?

I have a vue file like this,我有一个这样的 vue 文件,

 export default { data(){ return{ info: { name: '', image: '', }, errors: [] } }, created: function(){ this.getInfo(); }, methods: { getInfo: function(){ this.info.name = response.data.results[0].name; this.info.image = response.data.results[0].image; } } }

I am passing data from this file into a child Vue component.我正在将此文件中的数据传递到子 Vue 组件中。 The child component is as follows,子组件如下,

 <template> <div class="ui items"> <div class="item"> <div class="ui small image"> {{info.image}} </div> </div> </div> </template> <script> export default{ props:['info'] } </script>

My image is stored as a blob in a MySQL database.我的图像在 MySQL 数据库中存储为 blob。 When I run my application, the image appears as binary data on the UI.当我运行我的应用程序时,图像在 UI 上显示为二进制数据。 The object appears like this,物体看起来像这样,

图像的 JSON 响应

Can anybody here help me in displaying the image?这里有人可以帮我显示图像吗? Thank you very much!非常感谢!

What you want is a data url .你想要的是一个数据 url You will need to convert the byte array to base64.您需要将字节数组转换为 base64。 There is no way to use the raw bytes.无法使用原始字节。 Perhaps do this in a computed property, using one of the byte array to base64 functions .也许在计算属性中执行此操作,使用字节数组之一到 base64 函数

Markup标记

<img :src="dataUrl">

Behaviour (untested!)行为(未经测试!)

computed : {
    dataUrl(){
        return 'data:image/jpeg;base64,' + btoa(
            new Uint8Array(this.info.image)
            .reduce((data, byte) => data + String.fromCharCode(byte), '')
        );
    }
}

Search your conscience.搜索你的良心。 This is really not a good idea :-) Sending images as a JSON encoded byte array is something I've never seen, and will be about, guessing, 10x larger on the wire than the binary image.这真的不是一个好主意 :-) 将图像作为 JSON 编码的字节数组发送是我从未见过的,并且猜测在线路上比二进制图像大 10 倍。 Images in the DB are an antipattern . 数据库中的图像是一种反模式 Images in JSON work, but they should be encoded as base64 strings in the JSON. JSON 中的图像可以工作,但它们应该在 JSON 中编码为 base64 字符串。 Even then, they reduce the readability of the JSON, and can bury tools like Postman.即便如此,它们也会降低 JSON 的可读性,并且可以掩埋 Postman 之类的工具。 Data urls are much slower to load than regular urls.数据 url 的加载速度比常规 url得多。 Even with images in the DB, if you control your api, you can gain a lot by making image apis that return just the byte array, with an application/jpeg mime type.即使使用数据库中的图像,如果您控制您的 api,您也可以通过使用 application/jpeg mime 类型制作仅返回字节数组的图像 api 来获得很多收益。

You can load image data using Base64 format, like this,您可以使用Base64格式加载图像数据,如下所示,

<img src="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEVBMTczNDg3QzA5MTFFNjk3ODM5NjQyRjE2RjA3QTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEVBMTczNDk3QzA5MTFFNjk3ODM5NjQyRjE2RjA3QTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowRUExNzM0NjdDMDkxMUU2OTc4Mzk2NDJGMTZGMDdBOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowRUExNzM0NzdDMDkxMUU2OTc4Mzk2NDJGMTZGMDdBOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjjUmssAAAGASURBVHjatJaxTsMwEIbpIzDA6FaMMPYJkDKzVYU+QFeEGPIKfYU8AETkCYI6wANkZQwIKRNDB1hA0Jrf0rk6WXZ8BvWkb4kv99vn89kDrfVexBSYgVNwDA7AN+jAK3gEd+AlGMGIBFDgFvzouK3JV/lihQTOwLtOtw9wIRG5pJn91Tbgqk9kSk7GViADrTD4HCyZ0NQnomi51sb0fUyCMQEbp2WpU67IjfNjwcYyoUDhjJVcZBjYBy40j4wXgaobWoe8Z6Y80CJBwFpunepIzt2AUgFjtXXshNXjVmMh+K+zzp/CMs0CqeuzrxSRpbOKfdCkiMTS1VBQ41uxMyQR2qbrXiiwYN3ACh1FDmsdK2Eu4J6Tlo31dYVtCY88h5ELZIJJ+IRMzBHfyJINrigNkt5VsRiub9nXICdsYyVd2NcVvA3ScE5t2rb5JuEeyZnAhmLt9NK63vX1O5Pe8XaPSuGq1uTrfUgMEp9EJ+CQvr+BJ/AAKvAcCiAR+bf9CjAAluzmdX4AEIIAAAAASUVORK5CYII=">

For your problem,对于你的问题,

export default {
    data(){
        return{
            info: {
                name: '',
                image: '',

            },
            errors: []
        }
    },

  created: function(){
        this.getInfo();
  },

  methods: {
        getInfo: function(){
              this.info.name = response.data.results[0].name;
              this.info.image = 'data:image/jpeg;base64,' + btoa(response.data.results[0].image.data);
        }
  }
}

In template,在模板中,

<template>
    <div class="ui items">
        <div class="item">
            <div class="ui small image">
                <img :src="info.image">
            </div>
        </div>
    </div>
</template>
<img :src="require(`../../assets/images/products/${product.img}`)" />

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

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