FileReader实现上传图片前本地预览

javascript/jquery

浏览数:179

2019-7-21

AD:资源代下载服务

  平时做图片上传预览时如果没有特殊的要求就直接先把图片传到后台去,成功之后拿到URL再渲染到页面上。或者使用前端插件。这篇博客使用的是HTML5的新特性——FileReader。由于兼容性,这种方法不适合pc端…FileReader具体的兼容性点这里:FileReader兼容性

  自从有了HTML5的FileReader对象以后,预览图片变得简单多了,不再需要后台的配合,并且JS操作本地文件已经成为了可能。这种方法的思路是:通过readAsDataURL(file)方法把图片文件转成base64编码,然后把base64编码替换到预览图片的src属性即可。这篇博文主要讲解使用方法,如果想要了解更多关于FileReader对象的,可以看一下这里:FileReader详解。下面分别讲解上传单张和多张的案例:

 1、单张上传

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>上传单张预览</title>
</head>
<body>
<div id="wrapper">       
  <input id="fileUpload" type="file" />
  <div id="image-holder"> </div>
</div>
  
  <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  <script>
  $("#fileUpload").on('change', function () {
 
    if (typeof (FileReader) != "undefined") {
        var image_holder = $("#image-holder");
        image_holder.empty();
 
        var reader = new FileReader();
        reader.onload = function (e) {
            $("<img />", {
                "src": e.target.result,
                "class": "thumb-image"
            }).appendTo(image_holder);
 
        }
        
        reader.readAsDataURL($(this)[0].files[0]);  // url转base64
    } else {
        alert("你的浏览器不支持FileReader.");
    }
  });
  </script>
</body>
</html>

2、多张上传

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>上传多张预览</title>
</head>
<body>
<div id="wrapper">       
  <input id="fileUpload" type="file" multiple /><br />
  <div id="image-holder"> </div>
</div>
  
  <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  <script>
  $("#fileUpload").on('change', function () {
 
   //获取上传文件的数量
   var countFiles = $(this)[0].files.length;
 
   var imgPath = $(this)[0].value;
   var extn = imgPath.substring(imgPath.lastIndexOf('.') + 1).toLowerCase();
   var image_holder = $("#image-holder");
   image_holder.empty();
 
   if (extn == "gif" || extn == "png" || extn == "jpg" || extn == "jpeg") {
       if (typeof (FileReader) != "undefined") {
 
           // 循环所有要上传的图片
           for (var i = 0; i < countFiles; i++) {
 
               var reader = new FileReader();
               reader.onload = function (e) {
                   $("<img />", {
                       "src": e.target.result,
                           "class": "thumb-image"
                   }).appendTo(image_holder);
               }
 
               reader.readAsDataURL($(this)[0].files[i]); //图片转base64
           }
 
       } else {
           alert("你的浏览器不支持FileReader!");
       }
   } else {
       alert("请选择图像文件。");
   }
  });
  </script>
</body>
</html>

参考链接:

http://www.cnblogs.com/tandaxia/p/5125275.html

http://www.htmleaf.com/ziliaoku/qianduanjiaocheng/201706224590.html

 

作者:辛月