一、读取文件的对象 — new FileReader()  

上传图片接口参数有图片base64编码(数组, imgBase64List ),主要用到 读取文件的对象 【 new FileReader()  】

  1. //获取文件
  2. var file = $("#imgForm").find("input")[0].files[0];
  3.  
  4. //创建读取文件的对象
  5. var reader = new FileReader();
  6.  
  7. //创建文件读取相关的变量
  8. var imgFile;
  9.  
  10. //为文件读取成功设置事件
  11. reader.onload=function(e) {
  12. alert('文件读取完成');
  13. imgFile = e.target.result;
  14. console.log(imgFile);
  15. $("#imgContent").attr('src', imgFile); // 可以直接显示图片
  16. };
  17.  
  18. //正式读取文件
  19. reader.readAsDataURL(file);

二、我的实例

1、页面上放上传按钮和图片预览区

  1. <div class="row">
  2. <div class="col-md-6">
  3. <form name="form" id="formData">
  4. <strong>上传凭证:</strong>
  5. <input type="file" name="photo" id="photo" style="display:none;">
  6. <button type="button" class="btn btn-primary" ng-click="fileClick();">点击上传</button>
  7. </form>
  8. </div>
  9. </div><br>
  10. <div class="row" id="uploadPreview">
  11.  
  12. </div>

2、js实现

  1. /*订单,上传凭证*/
  2. var imgBase64Lists = []; // imgBase64List 数组
  3.  
  4. // 打开上传凭证模态框
  5. $scope.orderUploadModel = function ($index) {
  6. $scope.modalTitleShowSta = 8;
  7. $('#uploadPreview').empty('');
  8. imgBase64Lists = [];
  9. $scope.picUpload = $scope.orderInfoList[$index]; //当前订单信息
  10. $("#orderInfoDetailModel").modal("show");
  11. };
  12.  
  13. // 模拟触发点击 隐藏的[type=file]按钮
  14. $scope.fileClick = function () {
  15. $('#photo').click();
  16. };
  17.  
  18. // 每次选择图片都触发base64
  19. $('#photo').change(function () {
  20. dealWithPic('uploadPreview','photo');
  21. });
  22.  
  23. function dealWithPic(preview,photo) { // 预览框id , 上传按钮id
  24. var file = document.getElementById(photo).files[0]; //获取文件
  25. if (file) {
  26. var reader = new FileReader(); //创建读取文件的对象
  27. reader.onload = function(evt) {
  28. $('#'+preview).append('<img src="' + evt.target.result + '" style="width: 200px;height: 200px;margin: 10px;"/>');
    // imgBase64Lists.push(reader.result);
    imgBase64Lists.push((reader.result).split(',')[1]);
  1. };
    reader.readAsDataURL(file);
    } else {
    alert('上传失败,请重新上传!');
    }
    }

3、效果图

 点击上传图片:    

4、查看图片的 base64 编码

   target 是当前图片的信息: 

确定上传之后,可以看到传递过去的参数 imgBase64List(我上传了3张):

可以上网找在线的图片转base64的工具,我找到一个(http://imgbase64.duoshitong.com/),把我刚刚上传的图片放进去试了下,base64编码和请求里面的一样。

5、解决 下载接口返回的图片路径,显示“不支持的图片格式”

在 上面4 中我们也看了传过去的 base64 编码,但是貌似后台没有进行处理,是直接拿这个用的,所以就会导致 下载接口返回的图片路径,显示“不支持的图片格式”的问题,后来把 上面2 中 reader.result 截取一下,只传 ‘,’后面的编码,将后台返回的图片路径拼接上域名,在浏览器下载后双击图片展示出来,是我上传的图片,问题就解决了。。。

上传图片获取base64编码、本地预览的更多相关文章

  1. js获取base64格式图片预览上传并用php保存到本地服务器指定文件夹

    html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  2. 图片上传-本地图片转base64+ie8支持+本地预览支持

    最近项目由于flash同学没在了,图片上传只能前端重新做,后台希望用base64数据上传,复用之前接口 问题来了, 1.ie8 不支持canvas转base64 2.本地预览 base64数据,ie8 ...

  3. 利用FileReader实现上传图片前本地预览

    引子 平时做图片上传预览时如果没有特殊的要求就直接先把图片传到后台去,成功之后拿到URL再渲染到页面上,这样做在图片比较小的时候没什么问题,大一点的话就会比较慢才能看到预览了,而且还产生了垃圾文件,所 ...

  4. js实现上传图片本地预览功能以及限制图片的文件大小和尺寸大小

    方法一: js: /**     * 上传图片本地预览方法     * @param {Object} fileObj 上传文件file的id元素  fresh-fileToUpload      * ...

  5. IE8/9 本地预览上传图片

    本地预览的意思是,在选择图片之后先不上传到服务器,而是由一个<img>标签来预览本地的图片,非 IE8/9 浏览器可以从<input type="file"/&g ...

  6. FileReader 获取图片BASE64 代码 并预览

    FileReader 获取图片的base64 代码 并预览 FileReader ,老实说我也不怎么熟悉.在这里只是记录使用方法. 方法名 参数 描述 abort none 中断读取 readAsBi ...

  7. input[type=file]上传图片及转为base64码以及预览

    <input type="file" id="imgurl" capture="camera" accept="image/ ...

  8. ionic2+Angular 使用ng2-file-upload 插件上传图片并实现本地预览

    第一步:npm install ng2-file-upload --save 安装 ng2-file-upload 第二步:在需要使用该插件的页面的对应module文件的imports中引入Commo ...

  9. 搞清Image加载事件(onload)、加载状态(complete)后,实现图片的本地预览,并自适应于父元素内(完成)

    onload与complete介绍 complete只是HTMLImageElement对象的一个属性,可以判断图片加载完成,不管图片是不是有缓存:而onload则是这个Image对象的load事件回 ...

随机推荐

  1. SQLSEVER刚建表时主键自增

    alter table 表名 drop column ID alter table 表名 add ID int identity(1,1)

  2. String Buffer和String Builder的区别(转)

    相信大家看到过很多比较String和StringBuffer区别的文章,也明白这两者的区别,然而自从Java 5.0发布以后,我们的比较列表上将多出一个对象了,这就是StringBuilder类.St ...

  3. android开机启动流程说明

    android开机启动流程说明 第一步:启动linux 1.Bootloader 2.Kernel 第二步android系统启动:入口为init.rc(system\core\rootdir) 1./ ...

  4. javascript reduce 前端交互 总计

    sum(){ return this.products.reduce((total,next)=>{ return total + next.price * next.aumout},0) } ...

  5. 看完100篇Python技术精华文章,平均涨薪30%!

    一个以技术为立身根基的教育机构做出来的微信号,干货程度会有多高? 马哥Linux运维公众号运营五年,从一开始的定位就是给技术人分享加薪干货的地方.这五年里,公众号运营最重的任务就是做内容.内容并不好做 ...

  6. 并发编程大师系列之:线程的定义和中断 interrupt

    1.启动线程的三种方式: 1.1继承Thread类 public static class UseThread extends Thread { public void run() { System. ...

  7. PHP搭建大文件切割分块上传功能示例

    转载:https://www.jb51.net/article/101931.htm 背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示“该文件 ...

  8. windows下递归删除指定文件和文件夹

    //删除文件del *.后缀 /s//删除文件夹for /r 目录 %a in (文件夹名\) do @if exist "%a" rd /s/q "%a"

  9. mysql - InnoDB存储引擎 死锁问题( Deadlock found when trying to get lock; try restarting transaction )

    刚刚向数据库插入数据的时候出现了这么一段错误 Deadlock found when trying to get lock; try restarting transaction 主要原因(由于无法使 ...

  10. [bzoj 3701] Olympic Games (莫比乌斯反演)

    题目描述 给出n,m,l,r,modn,m,l,r,modn,m,l,r,mod 表示一个(n+1)∗(m+1)(n+1)*(m+1)(n+1)∗(m+1)的格点图,求能够互相看见的点对个数对modm ...