項目中有個上傳圖片的功能筛欢,當時選擇用有贊組件van-uploader闯冷,測試階段發(fā)現(xiàn)部分安卓手機無法使用秤茅,選中圖片無任何反應(yīng)。初步排查是van-uploader沒有兼容到該版本系統(tǒng)導致的柬泽。有問題的機型是:小米手機(Mi-4c)MIUI 9.7.11.23|開發(fā)版 安卓版本:7.0
解決思路
簡單粗暴的方法是不使用該方法慎菲,直接使用原生方法來解決。
解決步驟
以下以vue為例子:
一锨并、HTML部分
??利用<input type="file" />的原生方法來實現(xiàn)圖片上傳露该。其中它的accept屬性,規(guī)定文件上傳進行提交的文件類型第煮。例如只接受GIF和JPEG這兩種圖像解幼,可以寫成accept="image/gif,image/jpeg"。如果不限制圖片格式可以寫成accepte="image/*" 包警。
<div class="uploader_box">
<input type="file" id="logimg" accept="image/*" @change="onRead" />
<img class='camera-icon' :src="img.camera" />
</div>
二书幕、css部分
??由于默認的圖片上傳樣式比較丑,所以一般需要對其進行修改揽趾。小技巧:可以將input設(shè)置為絕對定位,然后透明度設(shè)置為0苛骨,父盒子的高度根據(jù)圖標高度變化即可篱瞎。
樣式對比圖
.uploader_box{
width:100%;
height: auto;
overflow: hidden;
position: relative;
}
#logimg{
position: absolute;
top:0;
left:0;
width:100%;
height:100%;
opacity:0;
}
.camera-icon{
width:100%;
height:auto;
}
三、JS部分
- 上傳圖片時編碼格式(enctype)只能是“multipart/from-data” 痒芝。
- 利用formData格式上傳圖片俐筋。一般的提交限制都會要求比價多,比如展示提交的圖片严衬、對提交圖片進行大小限制澄者、對圖片進行壓縮等,此處暫時不考慮其他,需要的可以查看本人的其他的相關(guān)文章粱挡。
- 讀取本地圖片URL的有fileReader和URL.createURL兩種方式赠幕。
- 本例以fileReader進行說明
import axios form 'axios';
onRead:function () {
let that=this;
let file=document.getElementById('logimg').files[0];
let reader=new FileReader();
reader.readAsDataURL(file);
reader.onload=function () {
let content=this.result; //圖片的src
let img =new Image();
img.src=content;
img.setAttribute('crossOrigin', 'Anonymous');
img.onload=function () {
let formData = new FormData();
let formData.append("file", file,file.name);
that.uploadImg(formData);
);
}
}
};
},
uploadImg:function(formData){
let that=this;
const instance=axios.create({ withCredentials: true})
let config = { headers: { "Content-Type": "multipart/form-data" }};
instance.post('/api/msgreply/UploadImg',formData,config).then(res => {
//后續(xù)其他操作
});
},