需求:
支持大文件批量上传 (20G) 和下载, 同时需要保证上传期间用户电脑不出现卡死等体验;
内网百兆网络上传速度为 12MB/S
服务器内存占用低
支持文件夹上传, 文件夹中的文件数量达到 1 万个以上, 且包含层级结构.
支持 PC 端全平台操作系统, Windows,Linux,Mac
支持文件和文件夹的批量下载, 断点续传. 刷新页面后继续传输. 关闭浏览器后保留进度信息.
支持文件夹批量上传下载, 服务器端保留文件夹层级结构, 服务器端文件夹层级结构与本地相同.
支持断点续传, 关闭浏览器或刷新浏览器后仍然能够保留进度.
支持文件夹结构管理, 支持新建文件夹, 支持文件夹目录导航
交互友好, 能够及时反馈上传的进度;
服务端的安全性, 不因上传文件功能导致 JVM 内存溢出影响其他功能使用;
最大限度利用网络上行带宽, 提高上传速度;
分析:
对于大文件的处理, 无论是用户端还是服务端, 如果一次性进行读取发送, 接收都是不可取, 很容易导致内存问题. 所以对于大文件上传, 采用切块分段上传
从上传的效率来看, 利用多线程并发上传能够达到最大效率.
解决方案:
文件上传页面的前端可以选择使用一些比较好用的上传组件, 例如百度的开源组件 webUploader, 泽优软件的 up6, 这些组件基本能满足文件上传的一些日常所需功能, 如异步上传文件, 文件夹, 拖拽式上传, 黏贴上传, 上传进度监控, 文件缩略图, 甚至是大文件断点续传, 大文件秒传.
第一步:
数据库配置
项目中数据库配置是在 DBConfig.java 文件中, 只需要在此文件中进行数据库配置即可.
在 DBConfig.java 文件提供了 MySQL,SQL Server,Oracle 的配置信息, 只需要填写对应的数据库配置即可. 如果使用的 MySQL 就填 MySQL 数据库的连接信息, 如果使用的是 Oracle 就填写 Oracle 数据库的连接信息
upload:{uploadLimit:5,fileSizeLimit:31744,removeTimeout:0.8}
以上三个变量代表的含义是:
uploadLimit: 表示上传文件个数的限制, 5 表示文件上传个数限制是 5 个
fileSizeLimit: 表示上传文件大小的限制, 31744 单位是 KB, 也就是表示 31M
removeTimeout: 表示移除文件的时间限制
继续查找使用到这些变量的地方, 看到了文件大小超出限制等
文件大小配置, 如果需要限制用户选择的文件大小, 则在 up6.JS 中对 FileSizeLimit 进行配置即可, 单位是字节.
了解了 BJUI 前端框架对于上传大文件的限制, 可以这样使用, 增大文件上传大小和数量, 可以按照如下进行修改, 我们在 bjui-all.JS 文件看到 uploadLimit 属性和 fileSizeLimit 属性的限制, 我们在 jsp 文件中可以这样进行替换, 这里使用的是覆盖原则, 重新定义 uploadLimit 属性和 fileSizeLimit 属性, 覆盖 bjui-all.JS 文件的默认值设置.
bjui-all.JS 文件的 uploadLimit 属性和 fileSizeLimit 属性对应到 jsp 文件中的属性就应该这样写, data-upload-limit 属性和 data-file-size-limit 属性, 只需要在后面改写为 data-upload-limit="800" 和 data-file-size-limit="5131264" 即可, 一定要注意这里的单位是 KB, 以上数字表示 501M.
关于 Uploadify 控件属性可以参考这篇文章也可以直接看官网文档:
https://www.cnblogs.com/yangy608/p/3915349.html
属性名称 | 默认值 | 说明 |
auto | true | 设置为 true 当选择文件后就直接上传了,为 false 需要点击上传按钮才上传 。 |
buttonClass | ” | 按钮样式 |
buttonCursor | ‘hand’ | 鼠标指针悬停在按钮上的样子 |
buttonImage | null | 浏览按钮的图片的路径 。 |
buttonText | ‘SELECT FILES’ | 浏览按钮的文本。 |
checkExisting | false | 文件上传重复性检查程序,检查即将上传的文件在服务器端是否已存在,存在返回 1,不存在返回 0 |
debug | false | 如果设置为 true 则表示启用 SWFUpload 的调试模式 |
fileObjName | ‘Filedata’ | 文件上传对象的名称,如果命名为’the_files’,PHP 程序可以用 $_FILES[‘the_files‘]来处理上传的文件对象。 |
fileSizeLimit | 0 | 上传文件的大小限制 ,如果为整数型则表示以 KB 为单位的大小,如果是字符串,则可以使用 (B, KB, MB, or GB) 为单位,比如’2MB’; 如果设置为 0 则表示无限制 |
fileTypeDesc | ‘All Files’ | 这个属性值必须设置 fileTypeExts 属性后才有效,用来设置选择文件对话框中的提示文本,如设置 fileTypeDesc 为 “请选择 rar doc pdf 文件” |
fileTypeExts | ‘*.*’ | 设置可以选择的文件的类型,格式如:’*.doc;*.pdf;*.rar’ 。 |
formData | JSON 格式上传每个文件的同时提交到服务器的额外数据,可在’onUploadStart’事件中使用’settings’方法动态设置。 | |
height | 30 | 设置浏览按钮的高度 ,默认值 |
itemTemplate | false |
来源: http://www.bubuko.com/infodetail-3329289.html