`
yale
  • 浏览: 356735 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签)

阅读更多
ssh2中文件带进度条的上传的demo有很多,但是大多数都是集成了上传的插件来实现的,如:swfupload,dwr等,功能也是非常强大,但是本上传组件没有集成任何插件来进行带进度条上传实现的。请大家在下载后,运行程序前了解本程序实现的原理,我在这里简单介绍一下实现的过程.

struts2上传原理:
struts2自身是封装了上传的操作的,它主要的实现的过程是先通过上传拦截器拦截后,对上传的文件大小进行控制(如果你对struts2的文件大小进行了限制的话,默认好像是允许上传20M内的文件),文件超过指定大小会抛出异常,如果没有超出指定大小,上传的文件会先存储在配置的临时文件夹下,文件上传到临时文件夹后,才会对临时文件夹下的文件进行拷贝,拷贝到自己指定的文件夹下。

对实现进度条功能造成的影响:
那么这样一来,你就无法真实来实现进度条功能,原因很简单,它有一个上传到临时文件夹的过程,然后才会进行拷贝到你指定的文件夹,那么你就无法来进行同步,获得上传的进度,我在网站上看到某些文件中说,只有等待它存储在临时文件夹后,在复制到目标目录时,进行进度判断,这样做中间有个等待过程,哪里还叫真正的进度条上传,这只是一种说法,还有很多种这样没有意义的想法,我就不举例了.

 

本程序实现方式:

1.附件大小限制:没有通过js脚本来验证文件大小,因为现在的浏览器版本太多,js验证文件大小会产生很多异常情况,而且大多数的js脚本程序都要通过设置安全级别来对文件大小作出判断,有的脚本不需要设置安全,但是它不能满足所有浏览器,我测试过,这里就不多啰嗦了.我是直接在后台对struts2抛出的异常的信息截取.然后通过ajax反映到前台来限制文件大小的,本程序设置struts2的上传文件大小限制为30M,如果上传30M以上的文件,会很快反映到前台

2.在上传到临时文件夹时,利用线程同时进行上传进度的跟踪,然后通过ajax,把跟踪的进度结果实时反映到前台,显示进度

3.因为考虑到该程序的特性,因此封装成标签,在想调用上传组件的jsp导入标签即可使用.

 

 

本程序实现功能:

1. 支持多个文件上传
2. 对上传文件进行增加、删除、清空本次上传文件,取消正在上传的文件等操作
3. 对上传文件前检测同名文件,以及上传文件的大小限制
4. 包含中文名称的文件上传、附件上传成功后,在数据库表中插入一条记录,表中file_src_name记录一个随机字符,
在下载时候通过该字段找到相应的附件 
5. 上传文件时候, 反映上传进度

 

 

二次开发本程序:

本程序目录结构:

com/bestsoft/ssh目录

bean/upload目录下:实体映射类

comm目录下:工具类

comm/upload目录下:上传标签类

dao目录下:数据访问接口和实现类

databean目录下:数据传输类

service目录下:业务逻辑接口和实现类

web/action/upload目录下:上传实现类

doc目录下:数据库文档及脚本、标签、设计等说明文件

其他目录下就是配置文件,jsp文件,tld文件等

 

运行程序:

下载本程序后,导入工程,导入相应的jar包,导入数据库文件,修改src下init.properties文件的配置信息(用户名,密码,数据库信息),本程序在tomcat5以上版本运行,ide为eclipse,数据库为mysql(如果你不是用mysql,自己手动进行修改成其他数据库),修改完成后即可运行本程序。

 

说明:

s2sh的jar包比较多,这里就不上传了,如果说需要jar包的话,可以留言给我,我再进行上传,因为本程序主要是以上传功能为主,因此在dao,service的等代码上简单的进行了编写.

 

程序截图:

初始界面:

 

 

已经上传成功的文件:

 

正在上传的文件:

 

上传文件时,对操作的限制:

 

禁止上传同名的附件:

 

上传文件大小的限制:

  • ssh.rar (106 KB)
  • 下载次数: 5253
78
7
分享到:
评论
45 楼 cpuabc12345 2014-03-13  
根本用了不。各种JS错误。各种乱码
44 楼 youc 2012-12-26  
楼主,编码格式我都才用的utf-8啊怎么还是乱码啊?
43 楼 youc 2012-12-26  
hibernate不能自动生成表啊,这可是个问题啊。难道还自己建表啊?
42 楼 kunsyliu 2012-12-24  
导入jar包启动没问题,运行却抛:

2012-12-24 10:29:54,093 [http-8080-1] [org.apache.struts2.dispatcher.Dispatcher-warn:49] [WARN] - Could not find action or result
There is no Action mapped for namespace / and action name upload-iframeRequest. - [unknown location]
41 楼 chenwes 2012-11-12  
感谢楼主的分享,下来学习
40 楼 saq520 2012-09-22  
[color=red][/color][b][/b][i][/i][u][/u]
引用
[img][/img][/url][url][flash=200,200][/flash]
39 楼 lihaoranhelloworld 2012-08-15  
好不错 谢谢!
38 楼 lovy_you 2012-05-20  
正找这个,感谢楼主
37 楼 heroxuetao 2012-02-24  
楼主还在吗?? 加我qq号   459327039  这例子我运行后报错 希望您给解答一下 谢谢
36 楼 oytens 2011-12-23  
可以说是个假进度条。网上现在有很多说上传进度条的,包括swfupload,这些都是假进度条。客户端到服务器,http传输的时间,才是最重要的,你这种方式是文件已经上传到服务器了,再做进度,没有太大意义。swfupload则是在客户端读取文件时展示进度,也是假的进度条。看是否真正进度,看一看前端向后端发了多少个http数据包就知道了。LZ的程序从服务端判断大小限制,可以知道数据已经全部到达服务器端了,所以是属于服务器端的假进度。本地测试不出来,看不出效果,放到网络上,传一个大文件就知道了。
35 楼 hwh0919 2011-12-14  
在firefox google浏览器中用不了啊!那个能用jquery做不??
34 楼 passlicense 2011-10-24  
支持多文件上传,这个可以吗?
33 楼 passlicense 2011-10-22  
这个算是比较不错的了!!支持!
32 楼 chenggong1220 2011-10-19  
挺好用的!
31 楼 yale 2011-10-09  
sunkuo 写道
这个进度条是一个假进度条,楼主对struts2上传进度的问题分析的很透:

对实现进度条功能造成的影响:
那么这样一来,你就无法真实来实现进度条功能,原因很简单,它有一个上传到临时文件夹的过程,然后才会进行拷贝到你指定的文件夹,那么你就无法来进行同步,获得上传的进度,我在网站上看到某些文件中说,只有等待它存储在临时文件夹后,在复制到目标目录时,进行进度判断,这样做中间有个等待过程,哪里还叫真正的进度条上传,这只是一种说法,还有很多种这样没有意义的想法



但是根本没有解决这个问题,upload对象只有临时文件生成结束才会有值,这样还是相当于上传完了才开始显示进度条,这个进度条这个时候只是临时文件到最后文件的一个读写操作。。还用了一个多线程。。。这太无聊了。大家上传一个300M的文件就能看出问题了,或者本地起服务器之后,从别的浏览器访问。

没有对楼主不敬的意思,除了这一点之外的代码写的都不错,但这恰恰是最关键的问题。遗憾的是我也没找到解决这个问题的办法。继续。。。。


   我在代码中写过,在上传到临时文件目录的同时开启了另一个线程进行同时上传到新目录,而不是等临时目录中文件上传完成后在进行真实拷贝!!!
30 楼 sunkuo 2011-10-08  
这个进度条是一个假进度条,楼主对struts2上传进度的问题分析的很透:

对实现进度条功能造成的影响:
那么这样一来,你就无法真实来实现进度条功能,原因很简单,它有一个上传到临时文件夹的过程,然后才会进行拷贝到你指定的文件夹,那么你就无法来进行同步,获得上传的进度,我在网站上看到某些文件中说,只有等待它存储在临时文件夹后,在复制到目标目录时,进行进度判断,这样做中间有个等待过程,哪里还叫真正的进度条上传,这只是一种说法,还有很多种这样没有意义的想法



但是根本没有解决这个问题,upload对象只有临时文件生成结束才会有值,这样还是相当于上传完了才开始显示进度条,这个进度条这个时候只是临时文件到最后文件的一个读写操作。。还用了一个多线程。。。这太无聊了。大家上传一个300M的文件就能看出问题了,或者本地起服务器之后,从别的浏览器访问。

没有对楼主不敬的意思,除了这一点之外的代码写的都不错,但这恰恰是最关键的问题。遗憾的是我也没找到解决这个问题的办法。继续。。。。
29 楼 gaohuixiang315 2011-10-07  
不能提交并显示出来啊!!!
28 楼 caoguojian9999 2011-05-18  
感谢楼主 正好想要用呢
27 楼 13478739420 2011-04-24  
服务器上发布了一下 非常感谢楼主 ,就是有点乱码小问题
26 楼 longtian2 2011-04-03  
小弟想请教一下,ssh2的下载应该怎样实现?

相关推荐

    ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签

    ssh2(struts2+spring2.5+hibernate3.3+ajax)带进度条文件上传(封装成标签)

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包3

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包6

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包5

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包10

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包4

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包8

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包7

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包9

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包101

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    Java资源包01

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics