VUE动态绑定audio/video/img的src不能播放或显示

写个项目,要求要本地上传音视频至服务器,再回显可播放。
当前项目使用了elementUI+Vue
上传图片,请求接口,将图片或者音频文件提交给后台,后台返回存储图片或者音频的ID,因为后台存到mogondb里面了,所以返回的是ID,如果存到服务器里面,返回的就是图片或者是音频存到服务器的地址。回显图片的方式是,先请求接口,根据图片的ID,请求接口图片或者是音频返回的内容,请求接口返回的内容为一个图片或者是音频。

图片如下:

页面显示的内容:

 

因为接口都是直接返回图片和音频,所以你不能用get请求,只能直接拼接到标签后边。

图片回显代码如下:

<template>
  <el-upload
     class="avatar-uploader"
     :action="fileurl"
     :data="file"
     :show-file-list="false"
     :before-upload="beforeAvatarUpload"
     :on-success="handleAvatarSuccess"
     :on-error="handleAvatarError">
     <img v-if="imageUrl" :src="imageUrl" class="avatar">
     <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  </el-upload>
</template>

<script>
    import api from '@/utils/env.js';
    export default {
        name:'',
        props:[],
        components:{
            
        },
        data(){
            return{
                'iconid':'123'
                'fileurl':api+"/mongodbfile/uploadtomongo", //上传图片的接口地址
                'file': {
                    'file': ''
                },  // 上传图片传递的参数
                'imageUrl': '', //回显的图片的URL
            }
        },
        computed:{
            
        },
        created(){
            
        },
        mounted(){
           if('新建活动'){
              console.log('新建不调用回显图片接口');
           }else{
             console.log('编辑活动需要调用图片接口');
           } 
        },
        methods:{
            // 编辑页面调用图片回显接口
            getUrlParams() {
              //自定义图片编辑回显的接口和iconid动态ID
              this.imageUrl = api+'/mongodbfile/downloadfromMongo?id='+this.iconid;  
            },
            
            //上传文件校验
            beforeAvatarUpload(file) {
                const isJPG = file.type;
                var isFlag = false;

                if (isJPG=='image/jpeg'||isJPG=='image/png') {
                   isFlag=true;
                }else{
                    this.$message.error('上传头像图片只能是 JPG | PNG 格式!');
                    isFlag=false;
                }
                //console.log(isJPG||isPNG);
                return isFlag;
            },
            //上传图片成功
            handleAvatarSuccess(res, file) {
                //console.log(res);
                if(res.flag=='true'){
                    this.imageUrl = URL.createObjectURL(file.raw);
                    //图片上传成功之后,重新给iconid 赋值
                    this.iconid = res.data;
                }else{
                    this.$message.error(res.mes);
                }
            },
             //上传图片失败
            handleAvatarError(res, file){
                this.$message.error('上传失败!');
            }, 
        },
        watch:{
           
        }
    }
</script>
<style scoped>

</style>

 Vue音频动态加载踩到的坑,回显音频的时候也是和回显图片一样的方法,但是音频的资源没有加载进来,一直没有声音,最后使用了动态拼接音频标签的方法,将音频文件加载进来了。
代码如下:

<template>
  <div id="zomain">
    
  </div>
</template>
<script>
  import api from '../../../utils/env.js';
  import axios from 'axios';
  export default {
        name:'',
        components:{
            
        },
        data(){
            return{
                
            }
        },
        filters:{
          
        },
        created(){
          
        },
        mounted(){
            
        },
        methods:{
             init(){
                 this.musicSrc = api + '/mongodbfile/downloadfromMongo?id='+soundid;
                 let audioDom = 
                 "<audio id='zo-audio' loop='loop' autoplay>"+
                  "<source id='audioSource' src='"+ this.musicSrc +"' type='audio/mp3'>"+
                 "</audio>";
                $('#zomain').append(audioDom);
                //苹果手机音频兼容性
                document.addEventListener("WeixinJSBridgeReady", function () { 
                 $('#zo-audio').get(0).play();
                 }, false);
             } 
        }
    }
</script>
<style scoped>

</style>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue中,可以使用v-bind指令或简写的冒号(:)来动态img标签的src属性。根据你提供的代码和需求,请参考以下步骤来实现动态src属性: 1. 在Vue实例的data属性中义一个存储图片地址的数组imgList,其中包含多个对象,每个对象代表一张图片,其中包含imgNo、src、width和height属性。 2. 在Vue模板中,使用v-for指令遍历imgList数组,为每个元素创建一个img标签,并使用:item指令将当前元素到item变量上。 3. 在img标签中,使用v-bind指令或简写的冒号(:)将item.srcsrc属性上,这样每个img标签的src属性都会根据对应的item对象的src属性动态更新。 4. 若要使用网络图片,需要在index.html页面的<head>标签中添加<meta name="referrer" content="no-referrer">,以防止浏览器发送Referer头信息。这样可以绕过一些图片防盗链的限制。 下面是一个示例代码: ```vue <template> <el-row :gutter="20"> <el-col :span="6" v-for="item in imgList" :key="item.imgNo"> <div class="grid-content bg-purple"> <img :key="item.imgNo" draggable="false" :src="item.src"> </div> </el-col> </el-row> </template> <script> export default { data() { return { imgList: [ { imgNo: 1, src: 'https://gitee.com/guo-xiaoya/images/raw/master/img/202304260905239.png', width: 40, height: 40 }, // 其他图片对象 ] }; } }; </script> ``` 通过以上步骤,你可以在Vue中实现动态img标签的src属性,以显示不同的图片。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值