解决h5+项目中头像上传时的跨域问题

图片上传时出现跨域问题的原因及解决方案

我们的项目和本地相册中的图片不在同一个域下,浏览器为了用户数据的安全会严格控制跨域加载数据,所以将一张跨域的图片绘制到 canvas 上,这个 canvas 就是被污染的,此时无法读取该 canvas 的数据。
解决的方案:如果跨域访问失败那么我就先读取文件数据封装成一个本地对象,然后在对这个对象中的文件数据进行加载和操作即可。
需要用到的plus的方法api如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码实现如下:重点在于pick到指定文件后的回调函数中,我们根据这个path解析文件并封装成entry对象,然后利用filereader以url数据编码格式读取entry中的file文件数据的内容,然后把读取到的内容放进img标签中,此时img标签内的内容就不是跨域的了。

var $image = $('#image');
//通过plus.gallery唤醒我们的本地相册窗口,然后选择好的图片地址会赋给path变量
//path是我们选择的图片的本地地址
plus.gallery.pick(function(path) {
						//console.log(path);
						//先创建一个本地文件读取器
						var filereader = new plus.io.FileReader();
						//读取本地相册中的文件
						plus.io.resolveLocalFileSystemURL(path,
							function(entry) {
							//读取的结果封装进entry
								entry.file(
								//file为读取到的文件数据对象
									function(file) {
									//读取文件数据
										filereader.readAsDataURL(file);
									//读取完毕后,本地设置src路径
										filereader.onloadend = function(e) {
										//所有文件或目录操作事件回调函数中都创建该对象的实例。 该对象从DOMEvent继承而来,可通过该其target属性获取事件触发的文件或目录操作对象。
											$image.attr('src', e.target.result);
											//调用cropper.js的裁剪框方法
											faceCutter();
										}
									},
									function(e) {
										console.log(e.message)
									}
								);
							},
							function(e) {
								console.log(e.message)
							});
					}, function(e) {
						// mui.openWindow("../../pages/my_info.html", "return_index");
						mui.back();
					}, {
						filter: "image"
					});
					
					//激活裁剪框
					function faceCutter() {
						plus.nativeUI.showWaiting("请稍等...");
						//				var $image = $('#image');
						var options = {
							aspectRatio: 1 / 1,
							crop: function(e) {}
						};
						// Cropper
						$image.cropper(options);
						plus.nativeUI.closeWaiting();
					}
					
					//图片上传
					$("#cutter").on('tap', function() {
						plus.nativeUI.showWaiting("上传中...");
						//获取裁剪后的结果
						var canvas = $image.cropper("getCroppedCanvas");
						//将其转化成bese64格式待上传
						base64Url = canvas.toDataURL();
						alert(base64Url);
						...ajax上传方法...
					}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值