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)

  • 相关阅读:
    centos 安装 TortoiseSVN svn 客户端
    linux 定时任务 日志记录
    centos6.5 安装PHP7.0支持nginx
    linux root 用户 定时任务添加
    composer 一些使用说明
    laravel cookie写入
    laravel composer 安装指定版本以及基本的配置
    mysql 删除重复记录语句
    linux php redis 扩展安装
    linux php 安装 memcache 扩展
  • 原文地址:https://www.cnblogs.com/attilax/p/15199174.html
Copyright © 2011-2022 走看看