zoukankan      html  css  js  c++  java
  • uni-app上传图片视频音频

    在写上传的功能时候,发现uni.choosefile上传文件不支持app,所以就自己写了一个上传的方法。、

     首先写了一个上传文件的组件。、,用input写成的。

    <view class="content" style="opacity: 0; position: absolute; bottom: 0;  0rem; height: 0rem;" >    
    <view ref="input"  class="input">  </view>      
    </view>

    然后写他的事件:

    mounted() {  
        var input = document.createElement('input')  
        input.type = 'file' ; 
        input.id="fileuplaod";
        input.onchange = (e) => {
        this._choose_file(input,e);
        }  
        this.$refs.input.$el.appendChild(input) 
        }  ,
        
    methods: {
        _createfile(e){
        let domobj=document.getElementById("fileuplaod");
        domobj.click();            
        },
        _choose_file(a,b){
        this.$emit("afterchose",a.files);
        //console.log(a,b)
        }
    
        }

    然后在页面上进行引用。

     <fileupload ref="fileupload" @afterchose="_afterchose" >
     </fileupload>  

    对应的事件

    _afterchose(e){
        let that=this;
            var file = document.querySelector('input[type=file]').files[0];
        this.uploadType=e[0].type;
        var reader = new FileReader();
         reader.onloadend = function () {
        console.log("展示的数据",file)}
         if (file) {
        reader.readAsDataURL(file);
    }},

    这个时候已经拿到了上传的文件地址。

    接着就是把拿到的地址展示到页面上面,然后对不同的文件进行不同的组件名称。

    <view class="content">
    <fileupload ref="fileupload" @afterchose="_afterchose" ></fileupload> //上传的组件 
    <view class="datalists"  v-for="(item,index) in datalist" :key="index">
    <image v-if="item.type=='image/png'||item.type=='image/jpeg'"  class="image1" :src="item.srcs"> //当是图片的时候展示     
    <video :poster="poster2" class="image1" :src="item.srcs" controlsv-if="item.type=='video/mp4'||item.type=='video/x-ms-wmv'"> //当是视频的时候显示 
    </video>                                            
    <audio :poster="poster1" v-if="item.type=='audio/mp3'" :src="item.srcs"  controls></audio> //当是音频的时候显示
    </view>
    <view class="uplode" @click="uploadfile()">+</view></view>  //上传点击事件

    最后对事件和js处理

    //上传的点击事件
    uploadfile(){
    this.$refs.fileupload._createfile(); },
    data(){
    return:{
    datalist:[], //data建立一个空的数组
    }

    //展示图片事件
    _afterchose(e){ let that
    =this; var file = document.querySelector('input[type=file]').files[0]; //上传的文件地址路径 this.uploadType=e[0].type; //判断当前上传文件的类型 var reader = new FileReader(); reader.onloadend = function () { let fileParam = { size:e[0].size, //上传的文件大小 type:e[0].type, //上传的文件类型 srcs:reader.result }; that.datalist.push(fileParam) } if (file) { eader.readAsDataURL(file); } },

    最后就写好了。css样式就不写了。

    如果需要多文件上传,改两个地方就好啦,

    组价的mounted:

    mounted() {  
                var input = document.createElement('input')  
                input.type = 'file' ; 
                input.multiple="multiple";    //加上多文件上传的属性
                input.id="fileuplaod";
                input.onchange = (e) => {
                    this._choose_file(input,e);
                }  
                this.$refs.input.$el.appendChild(input) 
            }  ,

    然后对获取文件的事件,进行一个循环取值:

            _afterchose(e){
               let that=this;
               var file;    
               let filelist=document.querySelector('input[type=file]').files
               for(let i=0;i< filelist.length;i++){                               
               file = filelist[i];
               console.log("上传的文件",file)        
               this.uploadType=e[i].type;
               var reader = new FileReader();
               reader.onloadend = function (obj) {
               let fileParam = {
                   name:file.name,
                   size:file.size,
                   type:file.type,
                   srcs:obj.target.result
                                };
                    that.datalist.push(fileParam)
                     console.log("现在的"+ JSON.stringify(that.datalist))
                 }
                   if (file) {                    
                        reader.readAsDataURL(file);
                               }
                     }
                                     
                          },

    这样子就ok了

  • 相关阅读:
    Redhat as 版本下启用 Telnet 和 FTP 服务
    Eclipse中设置编码的方式
    rhel3上安装Oracle(来自Oracle网站)
    home/end的快捷键~
    Red Hat Linux 9中文本模式与图形模式的切换
    Highcharts:非常漂亮的图表API
    Linux裸设备总结(ZT)
    Red Hat Linux操作系统下从文本模式切换到图形模式的方法
    pear
    Java中的asList
  • 原文地址:https://www.cnblogs.com/lovebear123/p/14134474.html
Copyright © 2011-2022 走看看