最近工作需要处理头像裁剪以及上传,研究了几天,写点心得,提醒自己记住踩过的坑,能帮助别人当然更好。

功能基本就是这样:

这里需要注意的是:拿到需求后,不要急于直接上手,花费半个小时,甚至更长时间缕清整个脉络是很有必要的,本人就因为后台接口的问题,返工了...

这里只是对完成方法的概述,具体实现功能请自行解决(真的一搜就有)!!!

起先,对这种功能以前并没有接触过,但是鉴于能力问题,采取插件可能是最好的方法。

当然要选取什么插件就成了大问题,幸好本人有一大秘诀,就是去各种已有此功能的网站寻求。

终而发现jcrop(百度用的),而且功能几乎完全符合,便花了一天的时间去了解,使用jcrop来搭建此功能,可是当把一切做好的时候却发现后台的接口只支持file流文件的发送,只有这一个接口,而jcrop提交的却是需要提供图片x,y等种种信息,它并非直接在本地裁剪后,在上传到服务器,故而剧终...

随即发现cropper,也是十分好用的一个裁剪插件,而且它是裁剪后,绘制成canvas直接输出的,可是如何将canvas传递给服务器呢?这里就要引出Blob了...

Blob是什么呢?请允许我百度后告诉你

(我们用到了File对象,而实际上 file 对象只是 blob 对象的一个更具体的版本,blob 存储着大量的二进制数据,并且 blob 的 size 和 type 属性,都会被 file 对象所继承。

所以, 在大多数情况下,blob 对象和 file 对象可以用在同一个地方,例如,可以使用 FileReader 借口从 blob 读取数据,也可以使用 URL.createObjectURL() 从 blob 创建一个新的 URL 对象。)

这样我们只要使用canvas转blob对象发送数据就好拉 canvas.toBlob(callback, type, encoderOptions);

blob上传这里本人用到了formdata,其实也就是新创建一个formdata对象,然后添加blob进入就好。

这里做点拓展:base64如何转成blob发送给后台呢(类似与我们这种只有file流文件接口的)

其实也很简单,

  function convertBase64UrlToBlob(urlData){

    var bytes=window.atob(urlData.split(',')[1]);        //去掉url的头,并转换为byte

    //处理异常,将ascii码小于0的转换为大于0

    var ab = new ArrayBuffer(bytes.length);

    var ia = new Uint8Array(ab);

    for (var i = 0; i < bytes.length; i++) {          ia[i] = bytes.charCodeAt(i);      }

    return new Blob( [ab] , {type : 'image/png'});

  }

只要调用方法就ok啦!

采用上述方法,按理说应该就可以了,可是本人试验后,却发现不可行,不知道是不是姿势不对。

之后同事给了一个方法,new File();光看名字就感觉很强硬啊...(u8arr为转换后的blob对象)

不过确实好使啊,一测试ie爆炸了(edge都爆炸)...

这可如何是好?

最终皇天不负有心人,还是让我找到方法啦:

对,就是最后这一个参数,给blob命名,然后就可以顺畅的传送啦...

<!-- 割 -->

其实很怕写东西,一是因为自己实力不够,二是怕误人子弟,要是大家耽搁了时间在这里又没有找到答案真的是有点过意不去啊,所以并不会写一步一步怎么做,只是讲个大略,相信有用的人一眼就能发现自己需要的,而觉得无用的也能直接X掉...

这个世界,有人在偷偷用心爱着你。

图片裁剪(cropper)后上传问题的更多相关文章

  1. 图片裁剪 cropper.js 上传组件封装 vue

    //HTML cropper.js 文档地址: https://github.com/fengyuanchen/cropperjs/blob/master/README.md <template ...

  2. 适应各浏览器图片裁剪无刷新上传jQuery插件(转)

    看到一篇兼容性很强的图片无刷新裁剪上传的帖子,感觉很棒.分享下!~ 废话不多说,上效果图. 一.首先建立如下的一个page <!DOCTYPE html> <html xmlns=& ...

  3. 使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器

    使用ajax上传图片,支持图片即时浏览,支持js图片压缩后上传给服务器 ajax上传主要使用了 var reader = new FileReader() 此方法 js图片压缩主要是利用canvas进 ...

  4. js插件---强大的图片裁剪Cropper

    js插件---强大的图片裁剪Cropper 一.总结 一句话总结:官网或者github里面的文档或者demo才是真的详细 使用的话找到图片裁剪后的base64数据,然后这个数据可下载可传递到服务器 1 ...

  5. 使用html5 FileReader获取图片,并异步上传到服务器(不使用iframe)

    使用html5 FileReader获取图片,并异步上传到服务器(不使用iframe)   原理: 1.使用FileReader 读取图片的base64编码 2.使用ajax,把图片的base64编码 ...

  6. #添加图片,最多只能上传9张.md

    #添加图片,最多只能上传9张.md 前端页面: ```javascript <form id="imgForm" enctype="multipart/form-d ...

  7. 简单的 Android 拍照并显示以及获取路径后上传

    简单的 Android 拍照并显示以及获取路径后上传 Activity 中的代码,我只贴出重要的事件部分代码 public void doPhoto(View view) { destoryBimap ...

  8. puzz: 图片和表单上传的不一致问题

    1.    方向1 用户提交表单, 图片和表单同步上传.(由同一服务器处理, 服务器压力大. 没有分离) 2.    方向2 图片和表单分开上传. 如图片访问ftp,表单提交后台(图片和后台分离) 2 ...

  9. C# 防止content-type修改后上传恶意文件

    以图片为例子.在上传图片的时候,使用Fiddler抓取 通过js判断文件类型是不安全的,所以通过后台来判断,代码如下: ) { HttpPostedFile file0 = Request.Files ...

随机推荐

  1. Python全栈开发——Linux命令学习

    Linux -- 一切皆文件 pwd: 查看当前所在目录 '/' :根目录 cd : 切换目录   eg.cd /    切换到根目录 ls:查看当前根目录下有几块盘.几个文件 ls -l:查看详细信 ...

  2. jvm 线程实现机制

    简单记一下 实际上jvm 规范中并无做限制. 不同的jvm实现上存在一定差异.技术上的选择主要在 jvm的线程是如何和操作系统的线程对应的.有1:1 的线程实现模式,也有N:1的线程实现模式,更有M: ...

  3. App对接支付宝移动支付功能

    前段时间看了下app对接支付宝移动支付的功能,并自己总结了下支付宝移动支付的实现流程 一.申请流程          前提是已有现成的应用. 1.  申请地址            https://b ...

  4. Java标准注释配置

    eclipse中java文件头注释格式设置 windows->preferences->java->Code Templates->comments->Type-> ...

  5. 应不应该使用inline-block代替float

    CSS布局创建网站,浮动绝对占据了很大的比例.大块区域如主内容及侧边栏,以及在其中的小块区域,都可以看到浮动的影子.这里浮动是唯一的解决方案吗? 浮动通常表现正常,但有时候搞起来会很纠结.特别是处理内 ...

  6. JIRA6.36-7.23数据迁移文档

    JIRA6.3.6-JIRA7.2.3数据迁移文档 安装JIRA7.2.3 安装包位于服务器/opt/SOFTWARE_PACKAGE目录下 建立JIRA安装的目录数据目录 cd /opt mkdir ...

  7. Android实战(一)学习了多个控件实现登录及记住密码功能

    首先确定一下需要的控件: 两个EditText:用于输入账号和密码 一个button:用于登录查看账号和密码是否正确 一个checkbox:用于记住密码和账户 一个Androidstudio:用于编写 ...

  8. 老李分享:webservice是什么?2

    web service 组件 基本的 web service 平台是 XML + HTTP.所有标准的 web service 使用以下组件: SOAP(简单对象访问协议) UDDI(通用描述.发现与 ...

  9. (转)POPTEST创始人李爱然:谢谢,帮助我的朋友!!!!

    2015年11月15日,脉脉上随意浏览信息.每天有很多人加我,我也会主动加一些人.脉脉的广告语“打通职场人脉”,很直白的告诉我们脉脉是用来找人办事的.简单明了,不用故作清高. “利”,有利可图便是“友 ...

  10. 漫谈PHP代码规范

    前言 虽说PHP是世界上最好的语言,但是写出来的PHP代码却往往不是最美观的.究其原因,可能正式因为PHP简单易上手,适合快速迭代的特性,导致了我们沉浸在迅速完成需求迭代的窃喜中,却忘记了规范性.忽略 ...