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的transition和animation的用法实例介绍
Aug 20 HTML / CSS
基于DOM+CSS3实现OrgChart组织结构图插件
Mar 02 HTML / CSS
用HTML5实现鼠标滚轮事件放大缩小图片的功能
Jun 25 HTML / CSS
深入理解HTML的FormData对象
May 17 HTML / CSS
html5实现移动端适配完美写法
Nov 16 HTML / CSS
如何用canvas实现在线签名的示例代码
Jul 10 HTML / CSS
Html5实现首页动态视频背景的示例代码
Sep 25 HTML / CSS
HTML5 canvas实现的静态循环滚动播放弹幕
Jan 05 HTML / CSS
css 中多种边框的实现小窍门
Apr 07 HTML / CSS
六种css3实现的边框过渡效果
Apr 22 HTML / CSS
html5实现点击弹出图片功能
Jul 16 HTML / CSS
纯html+css实现打字效果
Aug 02 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相当简单的分页类
2008/10/02 PHP
php daodb插入、更新与删除数据
2009/03/19 PHP
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
php求正负数数组中连续元素最大值示例
2014/04/11 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
php实现对两个数组进行减法操作的方法
2015/04/17 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
js 禁用浏览器的后退功能的简单方法
2008/12/10 Javascript
GreyBox技术总结(转)
2010/11/23 Javascript
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
js replace正则表达式应用案例讲解
2013/01/17 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
JavaScript异步加载浅析
2014/12/28 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
protractor的安装与基本使用教程
2017/07/07 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
以911新闻为例演示Python实现数据可视化的教程
2015/04/23 Python
python opencv实现切变换 不裁减图片
2018/07/26 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
2019/04/04 Python
银行奉献演讲稿
2014/09/16 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
2014年工程工作总结
2014/11/25 职场文书
三八妇女节寄语
2015/02/27 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
python3实现常见的排序算法(示例代码)
2021/07/04 Python