HTML5技术

移动前端图片压缩上传 - 李某龙(2)

字号+ 作者:H5之家 来源:H5之家 2017-12-06 08:12 我要评论( )

完成图片压缩后,就可以塞进formdata里进行上传了,先将base64数据转成字符串,再实例化一个ArrayBuffer,然后将字符串以8位整型的格式传入ArrayBuffer,再通过BlobBuilder或者Blob对象,将8位整型的ArrayBuffer转

  完成图片压缩后,就可以塞进formdata里进行上传了,先将base64数据转成字符串,再实例化一个ArrayBuffer,然后将字符串以8位整型的格式传入ArrayBuffer,再通过BlobBuilder或者Blob对象,将8位整型的ArrayBuffer转成二进制对象blob,然后把blob对象append到formdata里,再通过ajax发送给后台即可。

  XmlHttpRequest2中不仅可以发送大数据,还多出了比如获取发送进度的API,我代码里也进行了简单的实现。

upload(basestr, type, $li) { var text = window.atob(basestr.split(",")[1]); var buffer = new ArrayBuffer(text.length); var ubuffer = new Uint8Array(buffer); var pecent = 0, loop = null; for (var i = 0; i < text.length; i++) { ubuffer[i] = text.charCodeAt(i); } var Builder = window.WebKitBlobBuilder || window.MozBlobBuilder; var blob; if (Builder) { var builder = new Builder(); builder.append(buffer); blob = builder.getBlob(type); } else { blob = new window.Blob([buffer], { type: type }); } var xhr = new XMLHttpRequest(); var formdata = new FormData(); formdata.append('imagefile', blob); xhr.open('post', '/cupload'); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { console.log('上传成功:' + xhr.responseText); clearInterval(loop); //当收到该消息时上传完毕 $li.find(".progress span").animate({ 'width': "100%" }, pecent < 95 ? 200 : 0, function() { $(this).html("上传成功"); }); $(".pic-list").append('<a href="' + xhr.responseText + '">' + xhr.responseText + '<img src="' + xhr.responseText + '" /></a>') } }; //数据发送进度,前50%展示该进度 xhr.upload.addEventListener('progress', function(e) { if (loop) return; pecent = ~~(100 * e.loaded / e.total) / 2; $li.find(".progress span").css('width', pecent + "%"); if (pecent == 50) { mockProgress(); } }, false); mockProgress() { if (loop) return; loop = setInterval(function() { pecent++; $li.find(".progress span").css('width', pecent + "%"); if (pecent == 99) { clearInterval(loop); } }, 100) } xhr.send(formdata); }

 

  至此,整个上传的前端图片压缩就完成了,因为是用了formdata提交,所以后台接数据的时候就跟普通form表单提交数据一样处理即可。

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • C# WPF动点任意移动气泡画法(解决方案使用到数学勾股定理、正弦定理、向量知识)。 - 毁歌掌萌人

    C# WPF动点任意移动气泡画法(解决方案使用到数学勾股定理、正弦定理

    2017-11-23 18:05

  • vue+element-ui实现分页 - WEB前端小菜鸟

    vue+element-ui实现分页 - WEB前端小菜鸟

    2017-11-23 14:05

  • web前端vertical-align的作用及对象详解 - SXT明辉

    web前端vertical-align的作用及对象详解 - SXT明辉

    2017-11-17 16:03

  • 前端圈的寒冬要来? - 闰土少年

    前端圈的寒冬要来? - 闰土少年

    2017-11-15 12:00

网友点评
<