文件上传是很常用的一个功能,今天说一下struts2的文件上传,使用的是fileupload组件。
首先要有两个jar包,如下图所示:
如果没有这两个jar包的话上传肯定不会成功的,控制台会报错的。
然后再页面上要有一个上传文件的标签,如下图所示:
不要在意后面的onchange事件,这个是做的一个图片上传,为了能够点击图片直接弹出文件选择框而写的一个函数,顺便提一下吧,具体函数和做法如下图所示:
下面是函数:
这个。。。下面言归正传,继续说文件上传,页面上的上传文件的标签最重要的就是type="file"和这个标签的name属性,因为在action中要用到这个name属性的值。
在action中要给出如下三个文件的属性值,并且提供set/get方法。
在这可以看到,标签的name属性值使用到了,并且后面的imaFileName和imaContentType都必须以文件名字开头,不然是获取不到值的。
然后就到了具体上传的部分了,action方法如下:
大体的方法是这样的,其中
是设置你要保存文件的路径,放在WEB-INF下是为了保证文件的安全性,当然你也可以直接放在项目根目录下,也可以自己选择文件夹,下面的三行代码是判断你的项目中
是否存在你要存文件的文件夹,如果不存在的话就新建一个。
这一部分就是利用I/O流读取和写入文件了,没什么可说的,记得最后要关闭输入输出流即可。
到这一个文件上传基本完成了,但是有人会问,如果我只上传Excel文件或者word文件怎么办,再或者我只要求上传小于10M的文件怎么办?
这个问题你可以在上传的action中的方法中判断,也可以在struts2的配置文件中规定,下面上一下在struts2文件中规定的方法。
有人看到这个会说,这不是struts2的拦截器吗?对了,就是拦截器,拦截器里面设置param参数来实现上传,allowedTypes是允许上传的类型,
maximumSize是允许上传的文件大小。当然你也可以把你文件的上传路径也给放在这里。
除了拦截器,你还应该在struts2的配置文件中写入这么两行代码:
这个注释都写好了,我就不再啰嗦了。
这时候你就可以去上传文件了,但是上传的时候小手一抖,本来选图片的选了个word文件,然后也没看就上传了,然后页面上就除了一句英文,仔细一看,哦,原来是文件类型不对啊,
幸亏哥们儿英语过了六级,但是,要是英语没过六级怎么办?下面来说说英语没过六级。。。。。不是,是出现这种情况怎么办?
你需要这么两个文件就搞定了。首先在struts2配置文件中加入这么两行代码:
就是需要加入国际化的资源文件,value就是你的资源文件的名称,然后再资源文件中加入下面的代码即可
这样就可以了哦,当然你struts2配置文件中资源文件的value属性的值要和你资源文件的名字匹配。
恩,这个就是个人的一个学习记录,大牛们就可以略过了,有什么错误的欢迎大家指正。