struts2文件的上传下载Word格式文档下载.docx
- 文档编号:22566636
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:27
- 大小:291.79KB
struts2文件的上传下载Word格式文档下载.docx
《struts2文件的上传下载Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《struts2文件的上传下载Word格式文档下载.docx(27页珍藏版)》请在冰豆网上搜索。
/>
7.
8.
interceptor-stack
defaultStack"
9.
10.
interceptor-ref
11.
12.
/interceptor-stack>
13.
/interceptors>
14.
15.
default-interceptor-ref
16.<
/package>
上面列出了struts-default.xml中跟fileUpload拦截器有关的部分。
首先,Struts2有一个预定义拦截器叫fileUpload;
然后,defaultStack拦截器栈引用了fileUpload拦截器;
最后,struts-default包又将defaultStack拦截器声明为自己的默认拦截器引用。
因此,如果我们的包继承了struts-default包,而我们的Action类又没有声明自己的拦截器引用的话,使用的就是defaultStack拦截器栈,从而引用了fileUpload拦截器。
2:
实现上传页面
如果一个表单中,包含了文件上传的表单域,则一定要把整个表单enctype属性设置为multipart/form-data。
形如:
%@
page
language="
java"
contentType="
text/html;
charset=gb2312"
pageEncoding="
gb2312"
%>
3.<
!
DOCTYPE
html
PUBLIC
"
-//W3C//DTD
HTML
4.01
Transitional//EN"
http:
//www.w3.org/TR/html4/loose.dtd"
5.<
html>
6.<
head>
7.<
meta
http-equiv="
Content-Type"
content="
8.<
title>
Insert
title
here<
/title>
9.<
/head>
10.<
body>
11.<
form
action="
/helloworld/uploadAction.action"
method="
post"
enctype="
multipart/form-data"
文件名称:
input
type="
text"
fileName"
br>
文件:
file"
myFile"
submit"
value="
提交"
/form>
17.<
/body>
18.<
/html>
在这个文件里,指定了<
form>
元素的enctype属性为multipart/form-data,还用了一个type为file的输入域,它会在页面上生成一个文件选择框。
整个页面运行如下:
图13.1文件上传页面
在这个页面上文件域里面,在输入框后面多了一个“浏览”按钮,点击这个浏览按钮,就会弹出文件选择框。
3:
实现文件上传Action
这个Action和其他的Action没有太多特殊之处,使用一个String属性fileName来准备接收前一个页面的fileName文本框的值,然后使用一个File属性myFile来准备接收前一个页面的myFile文件框传过来的文件的值。
在execute方法中,我们可以随意存储上传的文件,本例只是把它放到了e盘的temp目录下,并以传入的fileName作为保存的文件名。
示例代码如下:
1.public
class
UploadAction
extends
ActionSupport{
private
String
fileName;
File
myFile;
public
getFileName()
{
6.
return
}
void
setFileName(String
fileName)
this.fileName
=
getMyFile()
setMyFile(File
myFile)
this.myFile
16.
17.
18.
execute()throws
Exception{
19.
//先把上传过来的文件存放到e盘temp目录下,以传入的fileName为名字
20.
OutputStream
output
null;
21.
InputStream
22.
try{
23.
new
FileOutputStream("
e:
/temp/"
+fileName);
24.
//建立一个1k大小的缓冲区
25.
byte[]
bs
byte[1024];
26.
27.
//将上传过来的文件输出到output中
28.
FileInputStream(myFile);
29.
int
length
0;
30.
//length=input.read(bs)这句话中,length=-1代表了读到文件结尾
31.
while
((length=input.read(bs))>
0){
32.
output.write(bs,
0,
length);
33.
34.
}finally{
35.
input.close();
36.
output.close();
37.
38.
SUCCESS;
39.
40.}
注意:
如何操作上传的文件,完全是I/O的知识,为了保持实例的简单,只是采用了最简单的方式,把内容存放在一个绝对路径表示的文件里面,当然还可以将上传的文件存储在web服务器上,甚至数据库中。
4:
映射这个Action
在struts.xml中对这个Action进行配置,可以看到没有任何特异之处,只是指出了Action名称和对应的实现类,以及上传之后要跳转到的页面。
helloworld"
extends="
action
uploadAction"
class="
cn.javass.fileupload.UploadAction"
result>
/fileupload/success.jsp<
/result>
/action>
5:
上传之后的页面
由于上传的文件在Action中已经被正确处理了,所以这个上传之后的页面没有任何特殊的作用,只是显示一下,表示上传成功了,示例代码如下:
%@taglib
prefix="
s"
uri="
/struts-tags"
4.<
成功上传文件<
s:
property
13.<
14.<
运行测试一下,在文件上传页面选择要上传的文件,然后点击提交按钮,会发现文件会上传,并以我们指定的文件名称保存到我们指定的文件夹下去了。
13.1.3获取文件的更多信息
Struts2支持用更多的属性来获取有关上传文件的真实文件名和文件类型。
比如:
表单中包含了一个叫xyz的文件域,也就是类似于<
inputtype=”file”name=”xyz”,那么可以用三个属性来获取上传文件的信息:
∙File类型的属性xyz用来获取文件内容。
∙String类型的属性xyzFileName用来获取文件的真实文件名。
∙String类型的属性xyzContentType属性用来获取文件的类型。
将处理上传文件的Action类修改一下,添加两个属性:
myFileFileName和myFileContentType,以及他们对应的getter/setter方法,来尝试获得文件的真实文件名和文件类型。
另外,保存文件的时候,也使用文件的真实名称,示例代码如下:
myFileFileName;
myFileContentType;
getMyFileFileName()
setMyFileFileName(String
myFileFileName)
this.myFileFileName
getMyFileContentType()
setMyFileContentType(String
myFileContentType)
this.myFileContentType
System.out.println("
用户传入的文件名:
上传文件的真实文件名:
+myFileFileName);
上传文件的类型:
+myFileContentType);
这个文件的文件名是什么?
+myFile.getName());
//把上传过来的文件存放到e盘temp目录下,以真实的文件名作为名字
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.}
运行测试一下,后台输出为:
1.用户传入的文件名:
aaa
2.上传文件的真实文件名:
filelist.xml
3.上传文件的类型:
text/xml
4.这个文件的文件名是什么?
upload__5ab75acc_12c5f17ac7a__8000_00000001.tmp
注意其中“这个文件的文件名是什么?
”,代码写的是输出myFile这个File对象的名字,由于myFile对象封装了上传文件的内容,因而某些朋友就认为这个文件就是我们上传的文件,从而认为它的getName方法就是返回的上传的这个文件的名字。
这是错误的,这个myFile文件是Struts2在上传过程中生成的临时文件,它的内容与上传文件相同,但是名字并不相同,它的名字是由Struts2临时生成的,形如“upload__5ab75acc_12c5f17ac7a__8000_00000001.tmp”这样的。
13.1.4限制文件的大小及类型
在文件上传的时候,有可能需要对文件的大小和类型做出限制。
Struts2支持直接在fileUpload拦截器上设置参数来进行限制。
在引用fileUpload拦截器的时候,可以指定三个参数(指定<
param>
子元素):
∙allowedTypes:
指定允许上传的文件的类型,如果存在多种类型,以逗号隔开。
这里添的不是文件的扩展名,而是对应的ContentType,如果不知道某种文件的ContentType可以先上传一下试试,在后台输出ContentType来。
∙maximumSize:
指定允许上传的文件的最大字节数。
∙allowedExtensions:
指定允许上传的文件的扩展名。
如果上传的文件不满足以上的参数指定的条件,则会跳转到一个叫input的<
上,一般input都会指回到提交之前的页面,也就是文件上传页面。
参数非常简单,但是配置比较怪异,fileUpload拦截器虽然在defaultStack拦截器栈上已经引用了,但是还可以在defaultStack拦截器栈之前再引用一次,然后在这次引用上指定参数,示例代码如下:
param
allowedTypes"
text/plain<
/param>
maximumSize"
1000<
/interceptor-ref>
result
input"
/fileupload/fileupload.jsp<
12.<
观察以上的<
action>
元素,要额外注意两点:
∙这个Action应该先引用fileUpload拦截器,然后引用defaultStack拦截器栈。
∙这个Action中还要有一个叫input的<
,以备上传不成功时,Struts2跳转到提交前的页面。
还要稍微修改一下login.jsp,来显示不满足限制条件时的错误信息。
只需要在合适的地方加上<
fielderror/>
来显示错误信息即可。
type
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- struts2 文件 上传下载