当前位置: 首页 > news >正文

atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7

atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7

 

1. 实现原理 1

2. 大的文件上传原理::使用applet 1

3. 新的bp 2

1. 性能提升---切割小文件上传,避免一次使用内存使用过大的 2

2. Uuid还是原来文件名:: 2

3. 监听器频繁地被调用 2

4. 结合wz easyui 2

4. 选型 2

5. Uploadify::yash js+flash 3

6. commons-fileupload:: 3

7. COS这个工具O'Reilly公司 3

8. 大的文件上传组件总结 3

5. 林吧实现ui Ajax+jq+bootstrap +commons-fileupload-1.2 4

6. #===code 5

7. 參考 6

 

1. 实现原理

 

假设须要显示运行进度条,实时显示文件上传进度
须要使用Ajaxj技术..up到个在的iframe黑头..
工作原理
事实上际就是在处理上传文件的同一时候,将上传进度的信息比如文件总长吨,已经上传多少,传输速率写入session中,client游览器
利用Ajax技术再新开一个独立的进程从session中获取上传进度信息,并实时显示,Ajax技术可以 不刷新页面获取server数据。session
可看做是server内存,能够用于存放少量的客户信息。

 

 

上传监听器
commons-fileupload版1.2支持上传监听,仅仅须要实现一个监听器,并把它加入到上传组件上就可以。

监听器须要实现它的progresslistener

 

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

 

2. 大的文件上传原理::使用applet

 

3. 新的bp

1. 性能提升---切割小文件上传,避免一次使用内存使用过大的

能够配置chunk,将一个大文件分成很多小文件上传。后台通过php合并成大文件

2. Uuid还是原来文件名::

最好是使用原来文件名称,这样能够在server上轻松的搜索..重名问题,能够后缀uuid解决..中文问题,能够转换为

3. 监听器频繁地被调用

是有问题的。由于它会很频繁地被调用。这会带来性能问题。一个比較好
的解决的方法是降低调用。

例如以下代码,为监听器类添加一个kiloBytes实例属性,其值默觉得-1。每当pBytesRead/1024的结果变化时(即以KB为单位添加时),将新的计算结果赋值给kiloBytes,然后
更新上传进度信息,否则什么都不做,直接返回。这样就能够降低信息更新的次数。假设上传的
文件很大时,能够将KB单位改为MB,进一步降低信息更新的次数

4. 结合wz easyui

不能放得个一个page黑头,贝儿up form走马兰..

4. 选型

比較普遍使用的多附件上传控件一般都是JS+FLASH,还有支持JS+HTML,JS+Silverlight等等,只是都没有js+FLASH的普 及,毕竟flashplayer如今基本上是个浏览器。上过网的都会安装,所以使用JS+FLASH插件对client的要求略微简单

5. Uploadify::yash js+flash

6. commons-fileupload::

使用最为广泛的Java文件上传组件,Struts本身採用这个包来处理文件上传。

文档很具体、简单易用。

 

因为fileupload 的局限,暂不能实现每一个上传文件都显示运行进度条。仅仅能实现一个总的进度条。效果如图,

7. COS这个工具O'Reilly公司

,据说是O'Reilly公司,这着实让我大吃一惊。毕竟O'Reilly公司的闻名是由于它的书,还从没听过这公司也有开源方面的贡献。

        在网上找到了一个对照资料,是比較这三个上传组件的。COS的速度明显优于FileUpload和SmartUpload!

随着容量的增大。FileUploadSmartUpload的性能下降很快。直到200M容量时。SmartUpload已经不堪重负崩溃了

接下载COS包(http://www.servlets.com/cos/index.html);最后更新时间竟然是2002年的11月05日!又让我大吃一惊,要知道在开源软件中,几天一更新是最正常只是的了,而这个COS包却可以这么久都不用更新,更让我充满了向往!

只是这个好想马ajax 进度条r..

 

8. 大的文件上传组件总结

 

Java Applet mupload

mupload是採用java applet技术构建的。使用标准http协议进行文件上传的组件。

打包后的组件经过数字签名后能够嵌入网页,并同意client上传文件到server,该组件包含 一个jar文件和一个js文件,使用js在须要的地方创建该网页组件就可以实现文件上传!该组件能够...

文件上传的Applet JFileUpload

JFileUpload 是一个Java的Applet程序用来通过Web或者FTPserver上传文件(非开源),server端能够是 JSP/Servlet、PHP、Coldfusion、CGI、ASP 等。提供上传进度条、取消button和拖放支持

多文件上传Applet JUpload

JUpload是一个多文件上传Applet。它可以一次性上传同一个文件夹下的全部文件。JUpload管理的client部分,使用HTTP协议上传时,你需 编写服务端管理上传文件的脚本,使用标准的HTTP POST命令 JUPload还有大量的配置參数 会话管理 语言国际化:超过20种语言 FTP和...  很多其它JUpload信息

 

5. 林吧实现ui Ajax+jq+bootstrap +commons-fileupload-1.2

bootstrap 能够到此下载:http://www.bootcss.com/

两个JAR包 :commons-fileupload-1.2.jar

                      commons-io-2.4.jar

 

 

 

6. #===code


举比例如以下
public  class  uploadListener  implements  progressListener{
     
         private uploadstatus status;          记录上传信息的javaBean
      
          public uploadListener(uploadstatus  status){     //构造函数
             
         this.status=status;
}
public void update(long bytesRead, long contentLength,int items){
        status.setBytesRead(bytesRead);                 已经读取的数据长度
        status.setContentLength(contenLength);         所上传的文件总长度
        status.setItems(items);                                   正在保存的第几个文件


}
}
prongressListener 接口仅仅有一个方法:update(long bytesRead,long contenLength,int items).
參数byteRead表示已经上传的字节数contentLength表示上传文件的总长度(假设为-1则表示总长度未知)
items表示正在上传的第几个文件。
加入了监听器后,上传组文件在上传文件时。会不断的回调该方法,回传这些数据。利用这些数据,就能够知道文件上传的进度,并用进度条实时的现实出来
因此须要把这些数据保存起来。在上述代码中把数据保存到了一个uploadstatus中而这是一个普通的java Bean,相关的代码例如以下
public class uploadstatus{
     private long bytesRead;
     private long contentLength;
     private int  items;
     private longstartTime=System.currenTimeMillis();

 

7. 參考

 

带进度条的文件上传 - 南海问天 - 博客园.htm

Java 文件上传组件 - 开源软件库 - 开源中国社区.htm

优秀的上传组件--COS - hingwu的专栏 - 博客频道 - CSDN.NET.htm (SmartUpload FileUpload ,cos的性能測试 ,cos使使用方法,)

java文件上传带进度条的 - - 博客频道 - CSDN.NET.htm  (jeigui zeush jeig)

Java 文件上传组件 Apache Commons FileUpload 应用指南(五)监听文件上传进度 - whistler - BlogJava.htm (监听器是有问题的。由于它会很频繁地被调用。这会带来性能问题)

Apache Commons fileUpload实现文件上传 - 子 孑 - 51CTO技术博客.htm(use jsp and sevlet up)

转载于:https://www.cnblogs.com/blfbuaa/p/6883068.html

相关文章:

  • android studio 1
  • Mysql 实现 序列的使用
  • 转载 FreeNAS的安装和简单配置 http://freenas.cn/?p=342
  • (转载)Linux 多线程条件变量同步
  • 编程语言类型划分
  • 关于sublime text 3 pylinter的错误提示
  • nil的使用
  • #Java第九次作业--输入输出流和文件操作
  • 路径层、裁剪区域
  • to_char函数 官方文档详解(数字格式转换和日期转换)
  • 【代码笔记】iOS-NSJSONSerializationDemo
  • java做http接口
  • Android异步载入全解析之开篇瞎扯淡
  • python版本与编码的区别
  • hdu5304 Eastest Magical Day Seep Group#39;s Summer 状压dp+生成树
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 2017年终总结、随想
  • 77. Combinations
  • ES6 学习笔记(一)let,const和解构赋值
  • EventListener原理
  • express如何解决request entity too large问题
  • IDEA 插件开发入门教程
  • java8-模拟hadoop
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • nodejs:开发并发布一个nodejs包
  • php ci框架整合银盛支付
  • SpiderData 2019年2月16日 DApp数据排行榜
  • text-decoration与color属性
  • 闭包--闭包作用之保存(一)
  • 测试开发系类之接口自动化测试
  • 彻底搞懂浏览器Event-loop
  • 基于游标的分页接口实现
  • 计算机在识别图像时“看到”了什么?
  • 将回调地狱按在地上摩擦的Promise
  • 今年的LC3大会没了?
  • 使用common-codec进行md5加密
  • 思考 CSS 架构
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 正则表达式
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • (03)光刻——半导体电路的绘制
  • (附源码)python房屋租赁管理系统 毕业设计 745613
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)大道至简,职场上做人做事做管理
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .net 按比例显示图片的缩略图
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换