用HTML5的File API做上传图片预览功能

HTML5的File API做上传图片预览功能

 

前几天做了一个项目,涉及到上传本地图片的功能,正好之前了解过?html5 可以上传本地图片,然后再网上看了一些demo结合自己的需求,终于搞定了。(PS : 不得不承认我这个人有多懒,没有需求的时候我向来不主动去学习)。移动端完全支持哦!已测试。

下面给大家看看代码吧怎么实现的

第一:HTLM部分(这里不去做漂亮的样式了我们注重学习功能)

<input type="file" id="fileElem" multiple accept="image/*" ?onchange="handleFiles(this)">
<div id="fileList" style="width:200px;height:200px;"></div>

注:如果想写成很漂亮的那种上传按钮,告诉大家我的写法就是模拟上传,即在input下面决定定位一张图片(上传按钮),input的宽高和图片色值一样大小,透明度为0 ,最后别忘记涉及z-index的顺序。

第二:JS利用H5新功能处理上传

Js实现图片上传前的预览功能,主要是使用html5 的 Files API?实现,ie可兼容部分功能,在火狐和chrome下正常运行。HTML5的 file input标签支持multiple 和 accept ,前一个属性可控制多文件选择,后一个控制上传的文件类型。预了解更多关于File API的资料,有自己查下。

<script>
    window.URL = window.URL || window.webkitURL;
    var fileElem = document.getElementById("fileElem"),
    fileList = document.getElementById("fileList");
    function handleFiles(obj) {
        var files = obj.files,
        img = new Image();
        if(window.URL){
            //File API
            alert(files[0].name + "," + files[0].size + " bytes");
            img.src = window.URL.createObjectURL(files[0]); //创建一个object URL,并不是你的本地路径
            img.width = 200;
            img.onload = function(e) {
                window.URL.revokeObjectURL(this.src); //图片加载后,释放object URL
            }
            fileList.appendChild(img);
        }else if(window.FileReader){
            //opera不支持createObjectURL/revokeObjectURL方法。我们用FileReader对象来处理
            var reader = new FileReader();
            reader.readAsDataURL(files[0]);
            reader.onload = function(e){
                alert(files[0].name + "," +e.total + " bytes");
                img.src = this.result;
                img.width = 200;
                fileList.appendChild(img);
            }
        }else{
            //ie
            obj.select();
            obj.blur();
            var nfile = document.selection.createRange().text;
            document.selection.empty();
            img.src = nfile;
            img.width = 200;
            img.onload=function(){
                alert(nfile+","+img.fileSize + " bytes");
            }
            fileList.appendChild(img);
        }
    }
</script>

PS: :大家在用的时候有什么问题及时给我反馈,需要案例源码的直接找我要吧,不上传下载了。因为这个源码都在页面上了!祝大家学习愉快!

 

未经允许不得转载:小月博客 » 用HTML5的File API做上传图片预览功能
微信公众号
关注我们,每天及时接收最新的学习资料
12000人已关注
分享到:
赞(0) 打赏

评论20

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #11
    如果编辑上传的文件的话就麻烦了,比如:上传了3张,要删除第二张再传2张时,似乎没有删除文件的接口。
    null2017-12-13 11:33:18回复
    • 可以自己改造这个
      小月2018-01-08 11:22:33回复
  2. #10
    我的怎么实现不了预览啊
    夏明2017-11-24 16:13:29回复
  3. #9
    那个按钮的字怎么变
    陈小姐2017-09-26 12:03:22回复
    • 哪个按钮?
      小月2017-11-13 10:45:06回复
  4. #8
    你好,如果我想把上传的图片提交后台处理是怎么提交呢?
    kay2017-06-27 15:54:12回复
    • 我们是获取到图片信息后分为头部信息和内容信息然后进行数据上传参考《H5上传图片》那个文章
      小月2017-06-29 16:38:50回复
  5. #7
    貌似不能用吧 没有看见预览功能啊 而且报错了
    星际xx2017-05-05 11:55:23回复
    • 报什么错了?
      小月2017-05-05 17:28:40回复
  6. #6
    求源码,谢谢
    筱凌2017-04-11 11:02:09回复
    • 这个文章里面就是所有的代码了
      小月2017-04-17 14:34:10回复
  7. #5
    有预览效果,怎么没有上传功能啊
    想为你唱之歌2017-03-07 17:07:14回复
  8. #4
    多图片上传这个哪里可以补充呀
    weiii2016-11-29 16:25:46回复
    • 现在我只会单一的图片上传,多图片上传好像有插件,可以查查
      小月2017-01-17 16:57:35回复
  9. #3
    预览后点击图片放大,可以删掉图片,类似QQ空间上传照片那样,如何实现
    薛建国2016-10-16 13:28:57回复
    • 抱歉刚看到, 这个就需要在这这个基础上功能更加复杂化了,
      小月2017-01-17 16:57:00回复
  10. #2
    小月,求源码,多谢
    求源码2016-03-09 17:01:34回复
    • 有什么不懂的么?大部分源码都已经贴上去了?不懂的可以加我的QQ群问我!
      小月2016-03-09 17:49:57回复
  11. #1
    本地预览的功能喜欢
    么么哒2016-03-04 20:32:47回复
    • 喜欢你就多学点
      小月2016-03-07 11:12:23回复

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏