app内部打开远程服务器界面拍照获取路径问题

10 篇文章 0 订阅

选择图片进行上传的时候,由于程序是在服务器端远程访问的。也就是本地没有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方式上传的接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stzyz_121314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值