HTML5实现图片文件异步上传

原文: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);
            }
        }
    });        

 

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

 

时间: 2024-09-22 05:20:53

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

ajax-Ajax文件异步上传问题

问题描述 Ajax文件异步上传问题 使用JQuery 进行异步上传文件,想点击"提交"后展示一个动画进度条(gif图片),提示"正在上传中",请问这种效果怎么实现? 解决方案 参考:http://download.csdn.net/detail/lvyulin/1470311 解决方案二: 点击提交后,进入调用ajax异步上传的方法,创建一个div浮动窗口,并展示进度条 在ajax中的success:function(msg){}及error:function(ab

表单上传功能实现 ajax文件异步上传

项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举的主要对于小文件上传的处理! 资源下载: 一.jQuery官方下载地址:https://jquery.com/download/ 一.表单上传: html客户端部分: <form action="upload.ashx" method="post" enctype="multipart/form-d

上传图片-ajaxfileupload多文件异步上传 获取不到file

问题描述 ajaxfileupload多文件异步上传 获取不到file 今天用ajaxfileupload 上传图片,网上百度学习了半天 ,实现了一个图片的上传 ,成功了 . 同样的方法,同一个页面另外一个上传按钮却失败了. 跟踪了看 ,值都传到后台取到了: CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest .getFile(imgName); imgName也是和页面的input type=file的id n

jQuery多文件异步上传带进度条实例代码_jquery

先给大家展示下效果图: ///作者:柯锦 ///完成时间:2016.08.16 ///多文件异步上传带进度条 (function ($) { function bytesToSize(bytes) { if (bytes === 0) return '0 B'; var k = 1024, // or 1000 sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], i = Math.floor(Math.log(bytes)

百度多文件异步上传控件webuploader基本用法解析_jquery

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

html5+php实现文件拖动上传功能

界面样式我是参考了一个国外的相册网站,改动不大,只是把鸟语转换成中文,以及上传时的样式也进行了改动,之所以选这个的原因就是,我很容易做扩展,它支持3种方式添加图片,一种拖拽上传,一种常规的选择文件上传,另外的就是添加网络图片.它很巧妙的把三种上传模式整合到了一起,而且你可以用IE浏览器浏览下,如果不支持HTML5,是没有拖拽上传图片的提示的,如图: 拖拽上传最重要的就是js部分的代码,它实现了70%的功能,另外30%仅仅是把图片信息提交到后台,然后做对应的处理,比如压缩啊,裁剪啊云云.所以先来看

基于PHP的AJAX技术实现文件异步上传

ajax|上传|异步 异步的文件上传是在现代的AJAX实现的Web应用里面经常要遇到,必须解决的问题.但是标准的AJAX类(XmlHttpRequest)无法实现传输文件的功能.因此,这里讨论的内容就是如何在AJAX的技术的基础之上构建异步的文件上传功能.在这个功能当中需要使用到内置的框及(IFRAME)来传输文件.这个功能实现的效果是页面在上传文件的时候,用户还可以使用该页面并且填写文件描述. 这个例子是我们引用AJAX的经典案例进行分析的. 系统环境 · 较新版本的浏览器.例如Opera,F

asp.net+ajaxfileupload.js 实现文件异步上传代码分享_实用技巧

由于代码很简单,这里就闲话不多说了,直接上代码,小伙伴们自己研读代码就明白了. 前台代码:  复制代码 代码如下: /*修改头像*/      //上传      function _sc() {          $(".ckfile").html("").css("color", "#535353");          $("#_userImgPath").val("");    

PHP的AJAX技术实现文件异步上传

异步的文件上传是在现代的AJAX实现的Web应用里面经常要遇到,必须解决的问题.但是标准的AJAX类(XmlHttpRequest)无法实现传输文件的功能.因此,这里讨论的内容就是如何在AJAX的技术的基础之上构建异步的文件上传功能.在这个功能当中需要使用到内置的框及(IFRAME)来传输文件.这个功能实现的效果是页面在上传文件的时候,用户还可以使用该页面并且填写文件描述. 这个例子是我们引用AJAX的经典案例进行分析的. 系统环境 · 较新版本的浏览器.例如Opera,Firefox或者 In