JavaScript Base64 作为文件上传的实例代码解析


Posted in Javascript onFebruary 14, 2017

例如我们用某些 裁剪插件 得到的图片是 

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNo8zjsOxCAMBFB/ KEAUFFR0Cbng3nQPw68ArZdAlOZppPFIBhH5EAB8b+Tlt9MYQ6i1BuqFaq1CKSVcxZ2Acs6406KUgpt5/ LCKuVgz5BDCSb13ZO99ZOdcZGvt4mJjzMVKqcha68iIePB86GAiOv8CDADlIUQBs7MD3wAAAABJRU5ErkJggg==">

这样的,那这样的文件怎样在from 表单上传(当然我是举例,大部分的裁剪插件都是有内置的)

首先需要 吧 base64 流转换成 blob 对象,文件对象都继承它。

函数如下:

function getBlobBydataURI(dataURI,type) { 
  var binary = atob(dataURI.split(',')[1]); 
  var array = []; 
  for(var i = 0; i < binary.length; i++) { 
    array.push(binary.charCodeAt(i)); 
  } 
  return new Blob([new Uint8Array(array)], {type:type }); 
}

那么剩下的就作为文件上传就ok

var $Blob= getBlobBydataURI(base64Data,'image/png'); 
var formData = new FormData(); 
formData.append("files", $Blob ,"file_"+Date.parse(new Date())+".png");

全部代码是这样子的:

<!DOCTYPE html> 
<html> 
<head> 
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
  <title>上传用例</title> 
  <meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'> 
  <script type="text/javascript"> 
    /** 
     * 根据base64 内容 取得 bolb 
     * 
     * @param dataURI 
     * @returns Blob 
     */ 
    function getBlobBydataURI(dataURI,type) { 
      var binary = atob(dataURI.split(',')[1]); 
      var array = []; 
      for(var i = 0; i < binary.length; i++) { 
        array.push(binary.charCodeAt(i)); 
      } 
      return new Blob([new Uint8Array(array)], {type:type }); 
    } 
    /** 
     * 上传 
     */ 
    function upload(){ 
      //base64 转 blob 
      var $Blob= getBlobBydataURI(document.getElementsByTagName("img")[0].currentSrc,'image/jpeg'); 
      var formData = new FormData(); 
      formData.append("files", $Blob ,"file_"+Date.parse(new Date())+".jpeg"); 
      //组建XMLHttpRequest 上传文件 
      var request = new XMLHttpRequest(); 
      //上传连接地址 
      request.open("POST", "www.xxx.com"); 
      request.onreadystatechange=function() 
      { 
        if (request.readyState==4) 
        { 
          if(request.status==200){ 
            console.log("上传成功"); 
          }else{ 
            console.log("上传失败,检查上传地址是否正确"); 
          } 
        } 
      } 
      request.send(formData); 
    } 
  </script> 
</head> 
<body> 
<button onclick="upload()">上传测试</button> 
<br /> 
上传的图片: 
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAeAB4AAD/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAEAAAAAAAD/2wBDABsSFBcUERsXFhceHBsgKEIrKCUlKFE6PTBCYFVlZF9VXVtqeJmBanGQc1tdhbWGkJ6jq62rZ4C8ybqmx5moq6T/wAALCABQADEBAREA/8QAGgAAAwADAQAAAAAAAAAAAAAAAwQFAAECBv/EADQQAAIBAwMCAgcGBwAAAAAAAAECAwAEEQUSITFBE1EVImFxgaHwBiMykbHRFEJDcoKiwf/aAAgBAQAAPwD0tc5AGc1MuftBYW7FfEMrDtGM/Ohp9pbNmUNHOgbo7qAP1p60vra8z4E6uR1HcfCmVrKHc3EdrBJNI2FUZNSIreXWR41w7xW38kSnBYebe/686o2ljaWwPgQxqemRyT8aO8UTqVeJWHkQKlzaHDuaS0Y28/VSh9X3EeX17KNpWoPc+Lb3KBLiDhwOhHmKo5qPqY9Iajb6eM+Go8aX2jsK71dmhW2tIcxrcSCNivUKeuKnw2mnyXc1rbJcRzxAnxd/UijwajdXkVlbrIqSXCsXkA5wCRx7eDQ7i4i024KxXV3PMuGKytlD8vLP5UfUHCXunaimVEuEYDqQeRVmpthg61qjHqPDH+p/anL+0F1Eu1gskbB42Izhh0pA2mqSho3a1h38PLGvrMK3Ppj24tpbHBktl2hWON47/Hmg3FnPduxbThbyyDa0xlDBR34HsouvRCLSIYlOdjoo+FP+tU6+b0Zq63pH3E6iOU4/Cex+VWI5FkUMrAg9CO9BvEnlgZLaURy54YjOKniy1sHPpKM/4D9qqqWCgOctgZ46mpN4w1HWLe1TlLY+LIfb2FWKHPBHcxtHKgZWGCCKi2y3FnqbWdlJ40CgM6yf0xnoD9frV+sqPrt1eWsG6EbIzgNL3XnsPr/tOaXZQWduFhbfv9ZnPVj503trrApeG0hgllkiTa0xzIck5P0TTGKzFDmhjnieKRdyOMMOmayGJIYkijXaqDCjOcCi1ql5ruGGQRt4hcjdhI2fj4A1w2oQqMsJ1Hm1vIB+eKJLdRQuElbYCMh24X3Z86WXWLJtv3yDchfl14x2PPWmra4juYEmiIKsM9c49nvo9aqXdyPHf+LGWXbHsObeSQdc8YwPnS5vnvrdgk6uN2DttJOx8wTinJ3dZFmhuCrSIQscqHacc5x1HGaQWYiaFI2UoYWCsLSX8ORwBu5B8/3qrpxJs4zuRlx6hQEAr24PNN1qlXhlnkKykCDPCLzv/uPl7Pn2ocVm8UZKSBJd7MGAyCCxIBHfrW/4eaa4Es2xQIigCknDE8noOwFci0mjeAwyIPCgMW5lJycr2yPI96ZtIBbWscAbdsUDPnR6/9k=" /> 
</body> 
</html>

以上所述是小编给大家介绍的JavaScript Base64 作为文件上传的实例代码解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript中的对象化编程
Jan 16 Javascript
JavaScript 获取当前时间戳的代码
Aug 05 Javascript
JS判断元素为数字的奇异写法分享
Aug 01 Javascript
javascript闭包入门示例
Apr 30 Javascript
JavaScript函数作用域链分析
Feb 13 Javascript
jQuery实现textarea自动增长宽高的方法
Dec 18 Javascript
ES6正则表达式扩展笔记
Jul 25 Javascript
JavaScript基于面向对象实现的猜拳游戏
Jan 03 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
Apr 17 jQuery
浅谈KOA2 Restful方式路由初探
Mar 14 Javascript
微信小程序开发注意指南和优化实践(小结)
Jun 21 Javascript
JavaScript中ES6规范中let和const的用法和区别
Aug 06 Javascript
JavaScript实现定时页面跳转功能示例
Feb 14 #Javascript
javaScript嗅探执行神器-sniffer.js
Feb 14 #Javascript
JS实现的简单图片切换功能示例【测试可用】
Feb 14 #Javascript
Javascript下拉刷新的简单实现
Feb 14 #Javascript
Vue 短信验证码组件开发详解
Feb 14 #Javascript
JS去除字符串中空格的方法
Feb 14 #Javascript
Node.js与Sails redis组件的使用教程
Feb 14 #Javascript
You might like
解决PHP上传非标准格式的图片pjpeg失败的方法
2017/03/12 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
2013/03/04 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
引用其它js时如何同时处理多个window.onload事件
2014/09/02 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
2016/06/07 Javascript
JS前端笔试题分析
2016/12/19 Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
2016/12/21 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
2018/08/23 jQuery
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
python实现Excel文件转换为TXT文件
2019/04/28 Python
Python内置方法实现字符串的秘钥加解密(推荐)
2019/12/09 Python
Tensorflow 实现释放内存
2020/02/03 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
Python子进程subpocess原理及用法解析
2020/07/16 Python
Python Tkinter实例——模拟掷骰子
2020/10/24 Python
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
Omio荷兰:预订火车、巴士和机票
2018/11/04 全球购物
物理课外活动总结
2014/08/27 职场文书
未受刑事制裁公证证明
2014/09/20 职场文书
小学生校园广播稿
2014/09/28 职场文书
2015年司法局工作总结
2015/05/22 职场文书
小学远程教育工作总结
2015/08/13 职场文书
我的中国梦主题班会
2015/08/14 职场文书
初中班主任教育随笔
2015/08/15 职场文书
总经理聘用协议书
2015/09/21 职场文书
Redis中一个String类型引发的惨案
2021/07/25 Redis