BigFileUpload
目录
背景介绍
这个项目是在朋友的一次面试中,面试人提出了一个问题.
我有一个100M的文件,然后我的宽带只有10M,我应该如何处理用户上传的文件?
根据这个问题,我小试牛刀,写了这个项目.
期间查阅了资料,借鉴了Fourwen的项目的前端框架和md写法.
再次感谢.
项目介绍
项目采用如下:
- 上层: Java, JDK8, Tomcat8,
- 服务端: Jsp, 原生
- 前端: webuploader, bootstrap, jquery
来进行开发,
针对文件的上传,一般可以考虑的功能点有
断点续传 在断网或者在暂停的情况下,能够在上传断点中继续上传。
分块上传 也是断点续传的基础之一,把大文件通过前端分块,然后后台在组在一起。
文件秒传 服务中已经有人上传过文件,其他人再上传这个文件直接记录并放回成功。
其他功能 下面这些功能归类到其他,是因为它们基本都是通过WebUploader来实现的,很简单。
- 多线程上传 多个线程上传不同的块文件。
- 文件进度显示 显示文件的上传完成情况。
使用说明
获取代码
不会经常更新,下一步会做一个集合公司内部网址的项目.
需要知识点
- 项目使用nio来进行文件的读取和创建
- 使用原生web来开发,不使用任何框架
- 使用Apache提供的fileupload来实现上传数据的获取
- 使用Apache提供的codec来实现md5加密
- 并发的理解
启动项目
…
项目示范
…
功能分析
分块上传可以说是我们整个项目的基础,像断点续传、暂停这些都是需要用到分块。
分块这块相对来说比较简单。前端是采用了webuploader,分块等基础功能已经封装起来,使用方便。
借助webUpload提供给我们的文件API,前端就显得异常简单。
var uploader = WebUploader.create({
// swf文件路径
swf: '${ctx}/webuploader-0.1.5/Uploader.swf',
// 文件接收服务端。
server: '${ctx}/upload.do',
//文件上传请求的参数表,每次发送都会发送此对象中的参数
formData: {