Html5实现文件异步上传功能


Posted in HTML / CSS onMay 19, 2017

1 简介

开发文件上传功能从来不是一件愉快的事,异步上传更是如此,使用过iframe和Flash的上传方案,也都感觉十分的别扭。本文简要简绍利用Html5的FormData实现文件的异步上传,还可以实现上传进度条和文件大小验证等。服务端使用springMVC的方案进行处理。

2 Html代码

<form id="myForm">
    <input type="file" id="u_photo" name="u_photo" />
    <input type="button" id="submit-btn" value="上传" />
</form>

3 JQuery上传

$("#submit-btn").on('click', function() {
    $.ajax({
        url:"/test/upload",
        type:"post",
        data:new FormData($("#myForm").get(0)),
        //十分重要,不能省略
        cache: false,
        processData: false,
        contentType: false,
        success: function () {
            alert("上传成功!");
        }
    });
});

4 JQuery文件大小验证

文件大小的及相应行为的控制,需根据需要自行处理,本方法只是示例方法。

$('#u_photo').on('change', function() {
    var file = this.files[0];
    if (file.size > 1024*1000) {
        alert('文件最大1M!')
    }
});

5 JQuery进度条

在ajax方法中加入xhr即可控制上传进度,进度条可以使用html5的progress也可使用其它的进度条。显示及隐藏进度条需要自行处理,本方法只是简单介绍了进度条的基本控制。

xhr: function() {
    var myXhr = $.ajaxSettings.xhr();
    if (myXhr.upload) {
        myXhr.upload.addEventListener('progress', function(e) {
            if (e.lengthComputable) {
                $('progress').attr({
                    value: e.loaded,
                    max: e.total,
                });
            }
        } , false);
    }
    return myXhr;
}

6 springMVC服务端

6.1 maven依赖

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.5</version>
</dependency>
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.2</version>
</dependency>

6.2 servlet-context.xml

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

6.3 Controller

示例程序,并未给出文件验证,存储及处理的相应代码。

@RequestMapping(value="/test/upload",method = RequestMethod.POST)
@ResponseBody
public String upload(@RequestParam("u_photo") MultipartFile u_photo) {
    System.out.println("u_photo="+u_photo.getSize());
    return "ok";
}

7 兼容性

IE 10+, Firefox 4.0+, Chrome 7+, Safari 5+, Opera 12+

8 推荐阅读

如果对上述方案不满意,推荐使用如下的解决方案:

JQuery File Uploader

以上所述是小编给大家介绍的Html5实现文件异步上传功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

HTML / CSS 相关文章推荐
CSS3教程:新增加的结构伪类
Apr 02 HTML / CSS
IE下实现类似CSS3 text-shadow文字阴影的几种方法
May 11 HTML / CSS
纯CSS3实现的8种Loading动画效果
Jul 05 HTML / CSS
css3媒体查询中device-width和width的区别详解
Mar 27 HTML / CSS
html5中localStorage本地存储的简单使用
Jun 16 HTML / CSS
用html5实现语音搜索框的方法
Mar 18 HTML / CSS
HTML5中drawImage用法分析
Dec 01 HTML / CSS
详解canvas绘制网络字体几种方法
Aug 27 HTML / CSS
关于iframe跨域使用postMessage的实现
Oct 29 HTML / CSS
CSS3通过var()和calc()函数实现动画特效
Mar 30 HTML / CSS
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
Jul 01 HTML / CSS
HTML 里 img 元素的 src 和 srcset 属性的区别详解
May 21 HTML / CSS
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
May 18 #HTML / CSS
HTML5中indexedDB 数据库的使用实例
May 11 #HTML / CSS
详解HTML5 window.postMessage与跨域
May 11 #HTML / CSS
HTML5拖放API实现拖放排序的实例代码
May 11 #HTML / CSS
解决html5中video标签无法播放mp4问题的办法
May 07 #HTML / CSS
Web前端页面跳转并取到值
Apr 24 #HTML / CSS
HTML5新特性 多线程(Worker SharedWorker)
Apr 24 #HTML / CSS
You might like
PHP中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
CodeIgniter中使用Smarty3基本配置
2015/06/29 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
js对象关系图 方便dom操作
2012/03/18 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
JS设计模式之惰性模式(二)
2017/09/29 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
原生js实现随机点名
2020/07/05 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
python+pyqt5实现24点小游戏
2019/01/24 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
Python命令行参数定义及需要注意的地方
2020/11/30 Python
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
高中毕业生自我鉴定例文
2013/12/29 职场文书
路政管理毕业自荐书范文
2014/02/10 职场文书
少先队活动总结
2014/08/29 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
物流业务员岗位职责
2015/04/03 职场文书
教师调动申请报告
2015/05/18 职场文书
开学随笔
2015/08/15 职场文书
导游词之嵊泗列岛
2019/10/30 职场文书
正确的理解和使用Django信号(Signals)
2021/04/14 Python