uni-app上传图片视频音频
<p>在写上传的功能时候,发现uni.choosefile上传文件不支持app,所以就自己写了一个上传的方法。、</p><p><img src="https://img2020.cnblogs.com/blog/1728151/202012/1728151-20201214171338994-85015110.png"></p>
<p> </p>
<p> </p>
<p> </p>
<p> 首先写了一个上传文件的组件。、,用input写成的。</p>
<div class="cnblogs_code">
<pre><view <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">content</span><span style="color: rgba(128, 0, 0, 1)">"</span> style=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">opacity: 0; position: absolute; bottom: 0; width: 0rem; height: 0rem;</span><span style="color: rgba(128, 0, 0, 1)">"</span> >
<view <span style="color: rgba(0, 0, 255, 1)">ref</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">input</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">input</span><span style="color: rgba(128, 0, 0, 1)">"</span>></view>
</view></pre>
</div>
<p>然后写他的事件:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mounted() {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> input = document.createElement(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">input</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
input.type </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">file</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)"> ;
input.id</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fileuplaod</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
input.onchange </span>= (e) =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">._choose_file(input,e);
}
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$refs.input.$el.appendChild(input)
},
methods: {
_createfile(e){
let domobj</span>=document.getElementById(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fileuplaod</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
domobj.click();
},
_choose_file(a,b){
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.$emit(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">afterchose</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,a.files);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">console.log(a,b)</span>
<span style="color: rgba(0, 0, 0, 1)"> }
}</span></pre>
</div>
<p>然后在页面上进行引用。</p>
<div class="cnblogs_code">
<pre> <fileupload <span style="color: rgba(0, 0, 255, 1)">ref</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fileupload</span><span style="color: rgba(128, 0, 0, 1)">"</span> @afterchose=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_afterchose</span><span style="color: rgba(128, 0, 0, 1)">"</span> >
</fileupload></pre>
</div>
<p>对应的事件</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">_afterchose(e){
let that</span>=<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> file = document.querySelector(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">input</span><span style="color: rgba(128, 0, 0, 1)">'</span>).files[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.uploadType=e[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">].type;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> reader = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> FileReader();
reader.onloadend </span>=<span style="color: rgba(0, 0, 0, 1)"> function () {
console.log(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">展示的数据</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,file)}
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (file) {
reader.readAsDataURL(file);
}},</span></pre>
</div>
<p>这个时候已经拿到了上传的文件地址。</p>
<p>接着就是把拿到的地址展示到页面上面,然后对不同的文件进行不同的组件名称。</p>
<div class="cnblogs_code">
<pre><view <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">content</span><span style="color: rgba(128, 0, 0, 1)">"</span>>
<fileupload <span style="color: rgba(0, 0, 255, 1)">ref</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fileupload</span><span style="color: rgba(128, 0, 0, 1)">"</span> @afterchose=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">_afterchose</span><span style="color: rgba(128, 0, 0, 1)">"</span> ></fileupload> //上传的组件
<view <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">datalists</span><span style="color: rgba(128, 0, 0, 1)">"</span>v-<span style="color: rgba(0, 0, 255, 1)">for</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">(item,index) in datalist</span><span style="color: rgba(128, 0, 0, 1)">"</span> :key=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">index</span><span style="color: rgba(128, 0, 0, 1)">"</span>>
<image v-<span style="color: rgba(0, 0, 255, 1)">if</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">item.type=='image/png'</span>||item.type==<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">image/jpeg</span><span style="color: rgba(128, 0, 0, 1)">'"</span><span style="color: rgba(128, 0, 0, 1)">class=</span><span style="color: rgba(128, 0, 0, 1)">"</span>image1<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)"> :src=</span><span style="color: rgba(128, 0, 0, 1)">"</span>item.srcs<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">> //当是图片的时候展示 </span>
<video :poster=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">poster2</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">image1</span><span style="color: rgba(128, 0, 0, 1)">"</span> :src=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">item.srcs</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)"> controlsv</span>-<span style="color: rgba(0, 0, 255, 1)">if</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">item.type=='video/mp4'</span>||item.type==<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">video/x-ms-wmv</span><span style="color: rgba(128, 0, 0, 1)">'"</span><span style="color: rgba(128, 0, 0, 1)">> //当是视频的时候显示 </span>
</video>
<audio :poster=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">poster1</span><span style="color: rgba(128, 0, 0, 1)">"</span> v-<span style="color: rgba(0, 0, 255, 1)">if</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">item.type=='audio/mp3'</span><span style="color: rgba(128, 0, 0, 1)">"</span> :src=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">item.srcs</span><span style="color: rgba(128, 0, 0, 1)">"</span>controls></audio> //当是音频的时候显示
</view>
<view <span style="color: rgba(0, 0, 255, 1)">class</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">uplode</span><span style="color: rgba(128, 0, 0, 1)">"</span> @click=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">uploadfile()</span><span style="color: rgba(128, 0, 0, 1)">"</span>>+</view></view>//上传点击事件</pre>
</div>
<p>最后对事件和js处理</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">//上传的点击事件<br>uploadfile(){
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$refs.fileupload._createfile();
},</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">data(){<br>return:{<br>datalist:[],//data建立一个空的数组<br>}<br><br>//展示图片事件<br> _afterchose(e){
let that</span>=<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> file = document.querySelector(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">input</span><span style="color: rgba(128, 0, 0, 1)">'</span>).files[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">]; //上传的文件地址路径
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.uploadType=e[<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">].type;//判断当前上传文件的类型</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> reader = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> FileReader();
reader.onloadend </span>=<span style="color: rgba(0, 0, 0, 1)"> function () {
let fileParam </span>=<span style="color: rgba(0, 0, 0, 1)"> {
size:e[</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">].size, //上传的文件大小
type:e[</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">].type,//上传的文件类型
srcs:reader.result
};
that.datalist.push(fileParam)
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (file) {
eader.readAsDataURL(file);
}
},</span></pre>
</div>
<p> </p>
<p>最后就写好了。css样式就不写了。</p>
<p> </p>
<p> </p>
<p>如果需要多文件上传,改两个地方就好啦,</p>
<p>组价的mounted:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">mounted() {
</span><span style="color: rgba(0, 0, 255, 1)">var</span> input = document.createElement(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">input</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
input.type </span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">file</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)"> ;
input.multiple</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">multiple</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">; //加上多文件上传的属性
input.id</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">fileuplaod</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
input.onchange </span>= (e) =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">._choose_file(input,e);
}
</span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$refs.input.$el.appendChild(input)
},</span></pre>
</div>
<p>然后对获取文件的事件,进行一个循环取值:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> _afterchose(e){
let that</span>=<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> file;
let filelist</span>=document.querySelector(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">input</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">).files
</span><span style="color: rgba(0, 0, 255, 1)">for</span>(let i=<span style="color: rgba(128, 0, 128, 1)">0</span>;i< filelist.length;i++<span style="color: rgba(0, 0, 0, 1)">){
file </span>=<span style="color: rgba(0, 0, 0, 1)"> filelist;
console.log(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">上传的文件</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,file)
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.uploadType=<span style="color: rgba(0, 0, 0, 1)">e.type;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> reader = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> FileReader();
reader.onloadend </span>=<span style="color: rgba(0, 0, 0, 1)"> function (obj) {</span><span style="color: rgba(0, 0, 0, 1)">
let fileParam </span>=<span style="color: rgba(0, 0, 0, 1)"> {
name:file.name,
size:file.size,
type:file.type,
srcs:obj.target.result
};
that.datalist.push(fileParam)
console.log(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">现在的</span><span style="color: rgba(128, 0, 0, 1)">"</span>+<span style="color: rgba(0, 0, 0, 1)"> JSON.stringify(that.datalist))
}
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (file) {
reader.readAsDataURL(file);
}
}
},</span></pre>
</div>
<p>这样子就ok了</p><br><br>
来源:https://www.cnblogs.com/lovebear123/p/14134474.html
頁:
[1]