1. JavaWeb:上传下载文件
http://blog.csdn.net/axi295309066/article/details/52984462
2. 课程概述
在Web应用系统开发中,文件上传功能是非常常用的功能,今天来主要讲讲JavaWeb中的文件上传功能的相关技术实现,并且随着互联网技术的飞速发展,用户对网站的体验要求越来越高,在文件上传功能的技术上也出现许多创新点,例如异步上传文件,拖拽式上传,黏贴上传,上传进度监控,文件缩略图,大文件断点续传,大文件秒传等等。
本课程需要的基础知识:
- 了解基本的Http协议内容
- 基本IO流操作技术
- Servlet基础知识
- javascript/jQuery技术基础知识
3. 文件上传的基础
对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,并且所有流数据都会随着Http请求携带到服务器端。所以,文件上传时的请求内容格式要能够基本看懂。
文件上传页面:
|
|
Http请求内容:
4. Java后台使用Servlet接收文件
如果使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般后台选择采用Apache的开源工具common-fileupload这个文件上传组件。
|
|
5. 使用WebUploader上传组件
文件上传页面的前端我们可以选择使用一些比较好用的上传组件,例如百度的开源组件WebUploader,这个组件基本能满足文件上传的一些日常所需功能,如异步上传文件,拖拽式上传,黏贴上传,上传进度监控,文件缩略图,甚至是大文件断点续传,大文件秒传。
5.1 下载WebUpload组件
http://fex.baidu.com/webuploader/ 到WebUpload官网下载WebUpload包
WebUpload目录结构:
5.2 基本文件上传Demo(包含上传进度)
前端
1.1 在页面导入所需css,js
|
|
1.2 编写上传页面标签
|
|
1.3 编写webupload代码
|
|
2)后端Servlet代码
5.3 生成图片缩略图
关键点:调用uploader.makeThumb()方法生成缩略图
|
|
5.4 拖拽,黏贴上传
1)页面添加拖拽区域的div
|
|
2)在webuploader的全局配置参数添加拖拽功能的参数
|
|
5.5 大文件分块上传
1)在webuploader全局参数中添加分块上传参数
|
|
2)监控上传文件的三个时间点
添加以上三个配置后,会发现当文件超过5M时,webuploader自动把文件会分几个请求发送给后台
每个分块请求,包含的信息:
可以监听文件分块上传的三个重要的时间点。
before-send-file : 在所有分块发送之前调用
before-send: 如果有分块,在每个分块发送之前调用
after-send-file: 在所有分块发送完成之后调用
|
|
before-send-file逻辑:
|
|
before-send逻辑:
|
|
3)后台需要保存所有分块文件
|
|
4)前台通知后台合并所有分块文件
|
|
5.6 大文件断点续传
在实现了分块上传的基础上,实现断点续传就非常简单了!!!
前端:
|
|
后台:
5.7 文件秒传
在所有分块请求之前,就已经可以进行实现秒传功能!!!
前端:
|
|
后台: