Struts2文件上传和下载.docx
《Struts2文件上传和下载.docx》由会员分享,可在线阅读,更多相关《Struts2文件上传和下载.docx(14页珍藏版)》请在冰豆网上搜索。
Struts2文件上传和下载
Struts2文件上传拦截器应用
Struts2框架内置的拦截器有个“fileUpload”拦截器,本节就针对该拦截器在开发中如何实现文件上传下载功能做一个简单说明。
在正式说明之前,还需要在Web项目中导入支持文件上传下载和IO输入输出的两个jar包。
它们名字为commons-fileupload-1.2.1.jar和commons-io-1.4.jar,这两个包都可以在apache网站上可以下载到。
Struts2文件上传功能开发
技术要点
本节代码详细说明文件上传功能的开发流程,介绍知识点如下:
文件上传页面和显示上传成功页面代码内容。
UploadAction类中实现上传功能方法和上传文件属性介绍。
struts.xml中UploadAction配置,以及字符编码、文件临时存放路径配置。
上传后所处路径和最终上传成功后效果展示。
演示代码
上传文件页面,这里定义的是多个文件上传。
-------------------------------------------文件名:
upload.jsp-------------------------------->
<%@taglibprefix="s"uri="/struts-tags"%>
上传文件--上传文件表单定义-->
formaction="upload"method="post"enctype="multipart/form-data">
--上传文件标签定义-->
上传文件: filename="file">
file> |
再次上传文件: filename="file">
file> |
submitname="submit"value="提交">
submit>
|
form>
上传文件成功后结果页面
-------------------------------------------文件名:
result.jsp-------------------------------->
<%@taglibprefix="s"uri="/struts-tags"%>
上传结果上传文件:
--显示上传成功文件名-->
propertyvalue="fileFileName"/>
UploadAction类代码
-------------------------------------------文件名:
UploadAction.java-------------------------------->
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.util.List;
importorg.apache.struts2.ServletActionContext;
importcom.opensymphony.xwork2.ActionSupport;
//文件上传Action
publicclassUploadActionextendsActionSupport{
//上传文件存放路径
privatefinalstaticStringUPLOADDIR="/upload";
//上传文件集合
privateListfile;
//上传文件名集合
privateListfileFileName;
//上传文件内容类型集合
privateListfileContentType;
publicListgetFile(){
returnfile;
}
publicvoidsetFile(Listfile){
this.file=file;
}
publicListgetFileFileName(){
returnfileFileName;
}
publicvoidsetFileFileName(ListfileFileName){
this.fileFileName=fileFileName;
}
publicListgetFileContentType(){
returnfileContentType;
}
publicvoidsetFileContentType(ListfileContentType){
this.fileContentType=fileContentType;
}
publicStringexecute()throwsException{
for(inti=0;i//循环上传每个文件
uploadFile(i);
}
return"success";
}
//执行上传功能
privatevoiduploadFile(inti)throwsFileNotFoundException,IOException{
try{
InputStreamin=newFileInputStream(file.get(i));
Stringdir=ServletActionContext.getRequest().getRealPath(UPLOADDIR);
FileuploadFile=newFile(dir,this.getFileFileName().get(i));
OutputStreamout=newFileOutputStream(uploadFile);
byte[]buffer=newbyte[1024*1024];
intlength;
while((length=in.read(buffer))>0){
out.write(buffer,0,length);
}
in.close();
out.close();
}catch(FileNotFoundExceptionex){
ex.printStackTrace();
}catch(IOExceptionex){
ex.printStackTrace();
}
}
}
struts.xml配置文件中有关文件上传的配置:
-------------------------------------------文件名:
struts.xml-------------------------------->
--系统常量定义,定义上传文件字符集编码-->
--系统常量定义,定义上传文件临时存放路径-->
\">
--Action所在包定义-->
--Action名字,类以及导航页面定义-->
--通过Action类处理才导航的的Action定义-->
/jsp/upload.jsp
/jsp/result.jsp
(1):
文件上传页面如图所示。
(2):
选择文件如图所示。
(3):
单击“提交”按钮后文件上传成功页面,并显示上传文件名,如图4.10所示。
(4):
两个被上传文件最终在服务器上存放路径效果如图所示。
代码解释
(1)在upload.jsp中通过Form标签和File标签定义了两个上传文件。
如果上传成功,在result.jsp中“[”和“]”之间显示上传文件的文件名,如果是多个文件,以“,”相隔。
这些显示格式都是用Property标签定义的。
注意:
如果上传文件,在JSP的Form中一定要定义如upload.jsp文件中黑体表示的部分。
method和enctype属性都必须要如代码中所示。
这样Form中上传文件才会起作用。
(2)UploadAction文件中先定义了常量UPLOADDIR,它是上传文件上传后存放的文件夹名字。
在已部署Web项目下的upload文件夹中,会有所有上传成功的文件。
注意:
在MyEclipse中开发的“WebRoot”目录下也要新建一个upload文件夹,否则已部署Web项目下将没有upload文件夹。
定义好UPLOADDIR后,在定义上传文件的属性变量。
也许其中的“fileFileName”和“fileContentType”看了有点别扭,尤其是“fileFileName”感觉不符合Java命名规范,但是这两个属性变量是“fileUpload”拦截器类中的类公有变量名字,只有这样定义,UploadAction执行时候会把在页面上选择的上传文件的属性值放在这两个变量里面,否则调试UploadAction时候会发现这两个变量都会是“null”即空值。
注意:
因为这里是进行多个文件上传功能开发,因此“file”、“fileFileName”、“fileFileName”属性变量都设定为List类型,其实还可以设定为数组类型。
个人觉得没有啥大区别。
完全凭个人喜好而定。
还有如果自己开发单个文件上传,就没必要把它们设定为List类型或数组类型。
直接把“file”定义为Java的IO包中