HTML5实现图片文件异步上传

利用HTML5的新特点做文件异步上传非常简单方便,本文主要展示JS部分,html结构。下面的代码并未使用第三发库,如果有参照,请注意一些未展现出来的代码片段。我这边的效果预览:

1.文件未选择 2.文件已选择

HTML代码部分:

  思路:下面代码中我利用css的z-index属性将input="file”标签隐藏在了id=btnSelect元素下面,通过触发a标签的点击后,弹出文件选择框。下面的masklayer用于点击确认按钮后的弹出层,避免用户重复点击确认按钮。

    <div id="wp" class="warpper">
            <a id="btnSelect">单击选择要上传的照片</a>
            <input id="uploadFile" type="file" name="myPhoto" />
            <button id="btnConfirm" class="btn" >确认上传</button>
    </div>
    <div id="maskLayer" class="mask-layer" style="display:none;">
        <p>图片正在上传中...</p>
    </div>

JS图片文件验证部分:

验证部分为:大小,是否已经选择,文件的类型 三个部分。第一个createObject方法为创建本地图片文件的预览路径,依次验证是否为空,文件类型以及文件大小,不满足条件则一律返回

false,满足以上3个条件后,在dom中生成图片预览,添加img元素,然后利用createObjectURL()方法获取预览路径。

代码:

    //获取数据的URL地址
    function createObjectURL(blob) {
        if (window.URL) {
            return window.URL.createObjectURL(blob);
        } else if (window.webkitURL) {
            return window.webkitURL.createObjectURL(blob);
        } else {
            return null;
        }
    }

    //文件检测
    function checkFile() {
        //获取文件
        var file = $$("uploadFile").files[0];
        //文件为空判断
        if (file === null || file === undefined) {
            alert("请选择您要上传的文件!");
            $$("btnSelect").innerHTML = "单击选择要上传的照片";
            return false;
        }

        //检测文件类型
        if(file.type.indexOf(‘image‘) === -1) {
            alert("请选择图片文件!");
            return false;
        }

        //计算文件大小
        var size = Math.floor(file.size/1024);
        if (size > 5000) {
            alert("上传文件不得超过5M!");
            return false;
        };
        //添加预览图片
        $$("btnSelect").innerHTML = "<img class=\"photo\" src=\""+createObjectURL(file)+"\"/>";
    };

JS Ajax请求部分:

说明:第一个监听文件选择更改事件,满足验证条件后则执行预览,第二个事件监听为监听单击btnSelect时弹出窗口的响应,下面的则是确认上传按钮的事件监听,开始发送Ajax请求。此处的createXHR()方法为创建XMLHttpRequest对象,代码我并未贴出,包括addEventListener()方法,这2个部分可以参考其他文章。

    //监听图片URL地址更改
    addEventListener($$("uploadFile"), "change", function() {
        checkFile();
    });

    //监听单击文件选择按钮
    addEventListener($$("btnSelect"), "click", function() {
        //弹出文件选择框
        $$("uploadFile").click();
    });
    //监听确认上传按钮的点击事件
    addEventListener($$("btnConfirm"), "click", function(e) {    

        if (checkFile()) {
            try {
                //执行上传操作var xhr = createXHR();
                $$("maskLayer").style.display = "block";
                xhr.open("post","/uploadPhoto.action", true);
                xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
                xhr.onreadystatechange = function() {
                    if (xhr.readyState == 4) {
                        var flag = xhr.responseText;
                        if (flag == "success") {
                            alert("图片上传成功!");
                        } else {
                            alert("图片上传成功!");
                        };
                        $$("maskLayer").style.display = "none";
                    };
                };
                //表单数据
                var fd = new FormData();
                fd.append("myPhoto", $$("uploadFile").files[0]);
                //执行发送
                xhr.send(fd);
            } catch (e) {
                console.log(e);
            }
        }
    });        

以上则为全部主要代码部分,如果有什么问题可以联系我,欢迎交流。

作者:Ziv小威

出处:http://imziv.com/

关于作者:专注于Java技术的程序员一枚,此外对JS开发保持着较高的兴趣。爱好音乐,阅读,FM等等。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

如有问题,可以邮件:[email protected]

微博:Ziv小威

HTML5实现图片文件异步上传,布布扣,bubuko.com

时间: 2024-10-23 11:38:31

HTML5实现图片文件异步上传的相关文章

HTML5+J2EE实现文件异步上传

P.S. HTML5经过了W3C的8年努力,终于正式推广了.这次升级最大的就是升级了XMLHTTPRequest,让它变成了XMLHTTPRequest Level II(这有啥奇怪的?).这个对象现在非常强大,可能会让所有使用jQuery的人全部重新拾起HTML原生的ajax技术. 闲话扯到这,接着是主题:我们今天要实现的就是下面的效果: 这里面文件名.文件大小和MIME都是在选择文件时读取和现实,然后点击上传之后,上传进度实时显示,最后弹出右边的对话框确认文件信息(当然这里我为了方便直接把文

百度 flash html5自切换 多文件异步上传控件webuploader基本用法

双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name="renderer" content="webkit"> 若页面需默认用ie兼容内核,增加标签:<meta name="renderer" content="ie-comp"> 若页面需默认用ie标准内核,增加标签

ASP.NET MVC 文件异步上传问题处理

最近在做一个网站,用asp.net MVC4.0来开发,今天遇到了个小问题,通过查找相关渠道解决了,在这里把这个问题写出来,问题非常简单,不喜勿喷,mark之希望可以给遇到相同问题的初学者一点帮助.我要实现文件的异步上传,前端提交的文件后台老是获取不到.我前端是这样写的: @using (Ajax.BeginForm("UpdateNewInfo", "Home", new AjaxOptions() { HttpMethod = "post",

SpringMVC + AJAX 实现多文件异步上传

转自:https://www.jianshu.com/p/f3987f0f471f 今天,我就这个问题来写一篇如何用 SpringMVC + AJAX 实现的多文件异步上传功能.基本的代码还是沿用上篇文章中所用到的项目,需要的朋友可以点击前面的链接查看.在这里只贴出关键代码. 首先我们要准备一个 JS 文件,即:ajaxfileupload.js,它需要用到 jQuery,所以我们还需要准备 jQuery 的库,两个文件在文末尾都有链接提供下载. JSP 关键代码: <li> <div&

文件的上传(表单上传和ajax文件异步上传)

一.表单上传: html客户端部分: <form action="upload.ashx" method="post" enctype="multipart/form-data"> 选择文件:<input type="file" name="file1" /><br /> <input type="submit" value="上传&q

JSP+SpringMVC框架使用WebUploader插件实现注册时候头像图片的异步上传功能

一.去官网下载webuploader文件上传插件 https://fex.baidu.com/webuploader/ 下载好后把它放到Javaweb项目的文件夹中(我放到了webcontent下面的static里面) 二.复制前端的样式 把这段代码放到你想要放到的位置(刷新页面和示例中不一样?不用担心因为你还没有初始化{就是还没有导入swf文件},指定路径后刷新应该就好了) 三.复制实现文件异步上传的js代码(这里我们只复制图片上传的部分) js源码的中文是乱码,应该是缺少谷歌改编码格式的插件

使用AjaxFileUpload.js实现文件异步上传

ajax是无法提交文件的,所以在上传图片并预览的时候,我们经常使用Ifame的方法实现看似异步的效果.但是这样总不是很方便的,AjaxFilleUpload.js对上面的方法进行了一个包装,使得我们不用去管理Iframe的一系列操作,也不用影响我们的页面结构,实现异步的文件提交. html: <input type="file" name="upload" hidden="hidden" id="file_upload"

HTML5 文件异步上传 — h5uploader.js

原文地址:http://imziv.com/blog/article/read.htm?id=62 之前写过一篇H5异步文件上传的文章, 但是很多朋友看着我的这个教程还是出现很多问题,文章写的不是很好,比较早了.其实通过H5做异步上传已经非常简单了,通过查看文档,便可以很轻松的完成这个功能,当然,如果你不愿意查看文档自己动手的话,那么就用插件咯.h5uploader是我最近封装的HTML5上传插件,代码才白来行,使用的话也比较简单,支持文件大小,类型,progress等等功能.本篇教程,将向你展

HTML5 FormData 用jquery 异步上传报错

平时做表单都是跳转提交的,但是今天要做一个ajax图片异步上传, 网上搜索了下,方法都比较老了,居然还有用flash的, 普通的表单上传通过jquery的serialize()转换成querystring后就可以直接ajax post 上传,但是碰到文件上传就不奏效了,型号html5有个方法FormData()可以实现上传, 我写的代码如下: function upThumbSubmit() { if(!window.FormData) { alert('your brower is too o