zoukankan      html  css  js  c++  java
  • FileReader实现上传图片前本地预览

      平时做图片上传预览时如果没有特殊的要求就直接先把图片传到后台去,成功之后拿到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

  • 相关阅读:
    表空间及组成表空间的物理文件
    MVCC
    innodb结构解析工具---innodb_ruby
    慢查询日志 与 general_log
    思考mysql内核之初级系列
    mysql内核源代码深度解析 缓冲池 buffer pool 整体概述
    change buffer
    python 学习笔记 copy
    xargs
    给tcpdump加点颜色看看
  • 原文地址:https://www.cnblogs.com/chenwenhao/p/9501678.html
Copyright © 2011-2022 走看看