• 【小月博客】 Html5 上传图片 移动端、PC端通用


    在博客园注册账号有些天了,感觉有些许欣慰,自己写的东西有人在看,有人在评论很是开心。(ps: 满足一下虚荣心吧!)

    废话不多说了,说一下今天给大家分享的是 html5上传图片。我们是在移动端使用的,但是这个在pc上也通用兼容性我只在谷歌测试过。之前一直用的angular写的《用HTML5的File API做上传图片预览能》。今天摒弃angular的东西分享一个html5 + js 图片上传案例。那么今天还是按照一定的步骤来讲吧。

    HTML 上传图片

    HTML 上传图片

    HTML

    第一步创建html,我们在页面中放置一个文件选择的input#upload(PS:偷懒一下,这里就不再次写案例了直接复制的我们的页面)

    <div class="con4">
         <span class="btn upload">上传<input type="file" class="upload_pic" id="upload" /></span>
     </div>

    CSS

    注:css 写的有些乱哈,看不懂的可以问我,或者直接自己写一下就ok。

    .con4{
         width: 80%;
         height: auto;
         overflow: hidden;
         margin: 15% auto 0 auto;
         color: #FFFFFF;
    }
    .con4 .btn{
         width: 45%;
         height: 40px;
         line-height: 40px;
         text-align: center;
         background: #d8b49c;
         display: block;
         font-size: 16px;
         border-radius: 5px;
    }
    .upload{
         float: left;
         position: relative;
    }
    .upload_pic{
         display: block;
         width: 100%;
         height: 40px;
         position: absolute;
         left: 0;
         top: 0;
         opacity: 0;
         border-radius: 5px;
    }

    Javascript

    通过getElementById获取节点,判断浏览器的兼容性,对于不支持FileReader接口的浏览器将给出一个提示并禁用input,否则监听input的change事件。

    //获取上传按钮
    var input1 = document.getElementById("upload"); 
     
    if(typeof FileReader==='undefined'){ 
         //result.innerHTML = "抱歉,你的浏览器不支持 FileReader"; 
         input1.setAttribute('disabled','disabled'); 
    }else{ 
         input1.addEventListener('change',readFile,false); 
    }

    然后,当file_input的change事件触发时,调用函数readFile()。在readFile中,我们首先获取file对象,然后通过file的type属性来检测文件类型,我们当然只允许选择图像类型的文件,然后我们new一个FileReader实例,并调用readAsDataURL方法来读取选中的图像文件,最后在onload事件中,获取到成功读取的文件内容,并以插入一个img节点的方式显示选中的图片。

    function readFile(){ 
         var file = this.files[0]; 
         if(!/image/w+/.test(file.type)){ 
             alert("文件必须为图片!"); 
             return false; 
         } 
         var reader = new FileReader(); 
         reader.readAsDataURL(file); 
         //当文件读取成功便可以调取上传的接口,想传哪里传哪里(PS: 你们可以把你们的靓照偷偷发给我!)
         reader.onload = function(e){ 
             var data = this.result.split(',');
             var tp = (file.type == 'image/png')? 'png': 'jpg';
             var a = data[1];
             //需要上传到服务器的在这里可以进行ajax请求
             ... ...
         }
    };

    写到这里我们已经完成了图片上传的功能了,大家有兴趣的自己动手尝试一下,不懂的地方或者我写错的地方一定要找我哦。

    FileReader的方法和事件

    参数/事件 描述
    方法
    abort 中断读取
    readAsText(file, [encoding]) 将文件读取为文本
    该方法有两个参数,其中第二个参数是文本的编码方式,默认值为 UTF-8。这个方法非常容易理解,将文件以文本方式读取,读取的结果即是这个文本文件中的内容。
    readAsBinaryString(file) 将文件读取二进制码
    通常我们将它传送到后端,后端可以通过这段字符串存储文件
    readAsDataURL(file) 将文件读取为DataURL
    将文件读取为一串Data URL字符串,将小文件以一种特殊格式的URL地址直接读入页面。小文件指图像与html等格式的文件。
    事件
    onabort 数据读取中断时触发
    onerror 数据读取出错时触发
    onloadstart 数据读取开始时触发
    onload 数据读取成功完成时触发
    onloadend 数据读取完成时触发,无论成功失败

    祝大家学习愉快!终于写完了估计还是有错别字的。大家有不同见解的记得给我留言哦![小月博客]

  • 相关阅读:
    sublime使用技巧
    周末时间学习Linux
    中小企业网络安全提升
    NoSQL是什么?
    IBM的淘汰之路
    Linux 中断处理浅析
    深入理解 C 语言的函数调用过程
    LAMP简易安装
    安装Fedora 24后必要的设置
    wget命令详解
  • 原文地址:https://www.cnblogs.com/aliyue/p/5569109.html
Copyright © 2020-2023  润新知