zoukankan      html  css  js  c++  java
  • 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中,客户端游览器
    利用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!

    随着容量的增大,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协议进行文件上传的组件。打包后的组件经过数字签名后可以嵌入网页,并允许客户端上传文件到服务器,该组件包括 一个jar文件和一个js文件,使用js在需要的地方创建该网页组件即可实现文件上传!该组件可以...

    文件上传的Applet JFileUpload

    JFileUpload 是一个Java的Applet程序用来通过Web或者FTP服务器上传文件(非开源),服务器端可以是 JSP/Servlet、PHP、Coldfusion、CGI、ASP 等。提供上传进度条、取消按钮和拖放支持

    多文件上传Applet JUpload

    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)

  • 相关阅读:
    将枚举的键值绑定到下拉列表框
    获取checkbox的选中值
    ADO.NET中的五个主要对象
    10.MVC框架开发(Ajax应用)
    9.MVC框架开发(关于ActionResult的处理)
    8.MVC框架开发(URL路由配置和URL路由传参空值处理)
    7.MVC框架开发(创建层级项目)
    6.MVC框架开发(文件上传)
    5.MVC框架开发(强类型开发,控制器向界面传递数据的几种方法)
    4.MVC框架开发(母版页的应用、按钮导致的Action处理、从界面向控制器传数据和HtmlHelper控件的实现(注册的实现))
  • 原文地址:https://www.cnblogs.com/attilax/p/5963932.html
Copyright © 2011-2022 走看看