选择图片进行上传的时候,由于程序是在服务器端远程访问的。也就是本地没有html,html都在服务器上的。会出现以下错误
Not allowed to load local resource: file:///storage/emulated/0/DCIM/Camera/IMG_20170525_154136.jpg
经过查询,是安卓的webview安全限制导致的。
当访问的是http协议的时候,无法使用file:///方式加载本地文件。
解决办法:
- 首先将拍照后得到的文件进行压缩zip处理,然后读取压缩数据进行base64加密 话不多说 直接看代码吧!
首先调取手机相机进行拍照
function showActionSheet(id){
var btnArray = [{title:"拍一张"}];
plus.nativeUI.actionSheet( {
cancel:"取消",
buttons:btnArray
}, function(e){
var index = e.index;
switch (index){
case 0:
break;
case 1:
appendByCamera(id);
break;
}
});
}
拍照后添加拍照文件
// // 拍照添加文件
function appendByCamera(id){
plus.camera.getCamera().captureImage(function(p){
compressImage(p,id);
});
}
最后进行base64数据流处理上传
/**
* @param {Object} img_src 拍照后获得的本地文件路径
* @param {Object} id 选填 我项目中需要的 如不需要可不传
*/
function compressImage(img_src,id){
console.log("+++++"+JSON.stringify(img_src));
var wt=plus.nativeUI.showWaiting("图片压缩中...");
var picname="_doc/"+Math.floor(Math.random()*100000000+10000000).toString()+".png";
plus.zip.compressImage({
src:img_src,
dst:picname,
quality:20,
width:"400px",
format:"png"
},
function(data) {
wt.close();
plus.io.resolveLocalFileSystemURL( data.target, function ( entry ) {
entry.file( function(file){
var reader = new plus.io.FileReader();
reader.readAsDataURL(file)
reader.onloadend = function(e) {
//获取base64加密的数据
urlData = e.target.result;
//上传服务器操作 方法可自行定义
uploadImg(id);
}
});
});
},function(error){
wt.close();
mui.toast('添加文件失败');
});
}
上面的e.target.result就是加密的bsse64结果,如果需要上传只需要这个就可以了
此文章只为不使用plus.creadUpload方式上传的接口