js获取APP缓存图片并上传文件服务器

使用场景

我司最近有这个一个需求,在客户录入用户信息的时候希望通过扫描证件获取用户信息并自动填充在input框了,除此之外会把证件进行截图,截图保存在APP的内部缓存里,然后做一个隐形的图片上传,也就是截图,保存图片,获取图片并上传,这一系了动作全由代码实现,在客户眼里是没有用户上传图片的,但是我们的系统需求确实需要的。那么就要想办法把这个图片传递到文件服务器上。

扫描证件以及截图是通过使用cordova插件实现的,前端js可以通过调用cordova获取到截图的存放路径。

APP 使用的cordova打包,

前端使用vue-cli

初始想法

最初的想法是根据cordova返回的截图路径,直接放置在 img标签的src里  然后通过canvas把img图片在画出来然后使用canvas.toDataURL("images/png",1.0)进行转化,接下来转化成base64,在转化成blob文件,到此就基本成功了,然后把blob文件放在formData里面作为从参数上传到文件服务器。

具体实现可参考:https://blog.csdn.net/happyelina/article/details/53556260

但是这种方式在Android系统下没有问题,但是在iOS下cordova返回的图片路径我无论是怎样放入到img标签了img图片都是不加载的,那么就没有办法使用canvas进行图片转化,所以只能摒弃这种方式,后来经过多方查询得知可以是用cordova-plugin-file这个插件访问文件系统,然后对此插件一通研究终于得偿所愿实现了Android和iOS的下图片的获取与上传。

最终实现

/*
 * android和ios文件系统目录不同  路径不同
 */
let card_img = "/var/../../../Documents/card.png" //ios
let card_img_android = "/sdcard/../../card.png"  //android

readLocalFile() {
   let that = this
   let img	
			                  
   window.resolveLocalFileSystemURL(cordova.file.applicationStorageDirectory,function(root){
    // cordova.file.applicationStorageDirectory
    // 访问APP内部缓存文件
    //

	if(!that.$store.state.isIos){//是否是iOS
		img = card_img_android
	}else{
		img = 'Documents/card.png'
	}
	root.getFile(img, {create:false}, function(fileEntry) {
		fileEntry.file(function(file) {
			console.log("file----->",file);
			var readerFile = new FileReader();
			readerFile.onloadend = function (e) {
                        //读取文件完成后,得到转换为二进制的文件然后转换成blob文件
				 var blob = new Blob([new Uint8Array(readerFile.result)], { type: 'image/png' });
				 console.info("blob-----<",blob);
				 that.imgUpload(blob) //调取文件上传接口
			}
				readerFile.readAsArrayBuffer(file)
			}, function(err){console.log('读取出错',err);});
		}, function(err){console.log('找不到文件',err);});
	},function(err){});
},

this.readLocalFile()

 

参考资料:https://blog.csdn.net/u011127019/article/details/57084310

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值