atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7
atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7
1. 性能提升---分割小文件上传,避免一次使用内存使用过大的 2
5. 林吧实现ui Ajax+jq+bootstrap +commons-fileupload-1.2 4
1. 实现原理
如果需要显示进度条,实时显示文件上传进度
需要使用Ajaxj技术..up到个在的iframe黑头..
工作原理
其实际就是在处理上传文件的同时,将上传进度的信息例如文件总长吨,已经上传多少,传输速率写入session中,客户端游览器
利用Ajax技术再新开一个独立的进程从session中获取上传进度信息,并实时显示,Ajax技术能够 不刷新页面获取服务器数据。session
可看做是服务器内存,可以用于存放少量的客户信息。
上传监听器
commons-fileupload版1.2支持上传监听,只需要实现一个监听器,并把它添加到上传组件上即可。监听器需要实现它的progresslistener
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2. 大的文件上传原理::使用applet
3. 新的bp
1. 性能提升---分割小文件上传,避免一次使用内存使用过大的
可以配置chunk,将一个大文件分成许多小文件上传,后台通过php合并成大文件
2. Uuid还是原来文件名称::
最好是使用原来文件名,这样可以在服务器上轻松的搜索..重名问题,可以后缀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插件对客户端的要求稍微简单
5. Uploadify::yash js+flash
6. commons-fileupload::
使用最为广泛的Java文件上传组件,Struts本身采用这个包来处理文件上传。文档非常详细、简单易用。
由于fileupload 的局限,暂不能实现每个上传文件都显示进度条,只能实现一个总的进度条,效果如图,
7. COS这个工具O'Reilly公司
,据说是O'Reilly公司,这着实让我大吃一惊,毕竟O'Reilly公司的闻名是因为它的书,还从没听过这公司也有开源方面的贡献。
在网上找到了一个对比资料,是比较这三个上传组件的,COS的速度明显优于FileUpload和SmartUpload!
随着容量的增大,FileUpload和SmartUpload的性能下降非常快,直到200M容量时,SmartUpload已经不堪重负崩溃了
接下载COS包(http://www.servlets.com/cos/index.html);最后更新时间居然是2002年的11月05日!又让我大吃一惊,要知道在开源软件中,几天一更新是最正常不过的了,而这个COS包却能够这么久都不用更新,更让我充满了向往!
不过这个好想马ajax 进度条r..
8. 大的文件上传组件总结
Java Applet mupload
mupload是采用java applet技术构建的,使用标准http协议进行文件上传的组件。打包后的组件经过数字签名后可以嵌入网页,并允许客户端上传文件到服务器,该组件包括 一个jar文件和一个js文件,使用js在需要的地方创建该网页组件即可实现文件上传!该组件可以... |
JFileUpload 是一个Java的Applet程序用来通过Web或者FTP服务器上传文件(非开源),服务器端可以是 JSP/Servlet、PHP、Coldfusion、CGI、ASP 等。提供上传进度条、取消按钮和拖放支持 |
JUpload是一个多文件上传Applet。它能够一次性上传同一个目录下的所有文件。JUpload管理的客户端部分,使用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)
atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7的更多相关文章
- atitit. 文件上传带进度条 atiUP 设计 java c# php
atitit. 文件上传带进度条 atiUP 设计 java c# php 1. 设计要求 1 2. 原理and 架构 1 3. ui 2 4. spring mvc 2 5. springMVC.x ...
- Struts2文件上传带进度条,虽然不是很完美
好久没有写东西,最近在做个项目,要用到文件h 传的,以前虽然也做上传,但是总觉得不好用 ,现在和队友合作做了一个带进度条的上传,觉得还行~~和大家分享一下. 首先说一下大概是这样实现的,在我们平时的上 ...
- springMVC+ajax 文件上传 带进度条
前端代码: <form id= "uploadForm"> <p >指定文件名: <input type="text" name= ...
- Flex4/Flash多文件上传(带进度条)实例分享
要求 必备知识 本文要求基本了解 Adobe Flex编程知识和JAVA基础知识. 开发环境 MyEclipse10/Flash Builder4.6/Flash Player11及以上 演示地址 演 ...
- Springboot 文件上传(带进度条)
1. 相关依赖 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http ...
- HTML5 + AJAX ( jQuery版本 ) 文件上传带进度条
页面技术:HTML5 + AJAX ( jQuery) 后台技术:Servlet 3.0 服务器:Tomcat 7.0 jQuery版本:1.9.1 Servlet 3.0 代码 package or ...
- php实现大文件上传带进度条
1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使 ...
- struts2多文件上传(带进度条)demo+说明
利用plupload插件实现多文件上传,实现图片: 在jsp写入js代码: z<%@ page language="java" contentType="text/ ...
- html5 文件上传 带进度条
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- jquery mobile开发笔记之Ajax提交数据(转)
http://my.oschina.net/xiahuawuyu/blog/81763 这两天学习了下,jquery mobile(以下简称jqm)的开发相关的内容.可能之前有过web的开发基础,相对 ...
- UVALive 4818 - Largest Empty Circle on a Segment (计算几何)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- 手把手教你用axis1.4搭建webservice(转)
1.先下载axis jar包:axis-bin-1_4.zip.下载地址: http://ws.Apache.org/axis/. 当然这个包其实是不全面的,像activation.jar之类的,完全 ...
- DataTable 怎样设置列宽? DataTable中已经有数据了怎样在现实的时候设置它的列宽?
首先要理解 DataTable是一个虚拟表,里面存有数据列,既然是虚拟的就不能够为它去设置宽度,如果设置的话可以对其绑定的控件进行设置.例如:绑定的控件对象为DataGridView那么可以这样 da ...
- Python验证码识别处理实例(转载)
版权声明:本文为博主林炳文Evankaka原创文章,转载请注明出处http://blog.csdn.net/evankaka 一.准备工作与代码实例 1.PIL.pytesser.tesseract ...
- PHP安装rrdtool扩展
首先,我的环境是Centos 6.5 PHP版本是5.51.首先安装rrdtool需要的依赖库文件 yum -y install pango* 2.先服务器安装rrdtool wget http ...
- js关闭浏览器的tab页(兼容)
由于在脚本中使用了 window.close(), 当前非弹出窗口在最新版本的chrome和firefox里总是不能关闭,而在 IE中是可以关闭的 . 在console中弹出提示"Scrip ...
- java容器简要概述
java中集合框架的概述 java集合类主要用于保存对象的. 常用的集合对象: Colletion接口,Collection接口是集合中的顶层容器,表示的是一组对象,它的下面有两个子接口List接口和 ...
- 9x25 串口映射
duart /dev/ttyS0 /dev/ttyS0 usart1 /dev/ttyS2 /dev/ttyS1 usart2 /dev/ttyS3 ...
- 基本套接字编程(1) -- tcp篇
1. Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机 ...