struts1中的文件上传
在struts1和2中,分别对commons-fileupload组件进行了包装,使文件上传操作更方便。
本文讲解如何使用struts1上传文件。
步骤:
1编写jsp页面
2给jsp中的form表单配置一个ActionForm
3编写Action,处理文件上传功能
4配置struts-config.xml文件
5测试
1、首先有个jsp页面—upload_form.jsp
<%@pagelanguage="java"contentType="text/html;charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@tagliburi="/WEB-INF/struts-html.tld"prefix="html"%>
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=ISO-8859-1">
<title>UploadFile</title>
</head>
<body>
<html:formaction="upload.do"method="post"enctype="multipart/form-data">
<html:fileproperty="file"></html:file>
<inputtype="submit"value="Submit"/>
</html:form>
</body>
</html>
其中的action是指提交到的action
enctype是指表单提交的数据格式
2给上面的jsp中表单配一个ActionForm–UploadForm
publicclassUploadFormextendsActionForm{
privatestaticfinallongserialVersionUID=1L;
privateFormFilefile;
publicFormFilegetFile(){
returnfile;
}
publicvoidsetFile(FormFilefile){
this.file=file;
}
}
其中的file成员变量对应upload_form.jsp表单中为file的property。
在struts1中,文件对象被封装成了org.apache.struts.upload.FormFile对象。
3编写action–UploadAction
继承org.apache.struts.action.Action类
publicclassUploadActionextendsAction{
Loggerlogger=Logger.getLogger(UploadAction.class);
@Override
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse)
throwsException{
//将缓存表单数据的form强转成UploadForm类型,得到其中的file变量
UploadFormuf=(UploadForm)form;
FormFileff=uf.getFile();
//输出UploadForm中的变量file的信息-文件名-文件大小
logger.debug("filename:"+ff.getFileName());
logger.debug("filesize:"+ff.getFileSize());
//得到该文件的输入流
InputStreamis=ff.getInputStream();
//该文件要保存的路径-文件名,“upload”为web-root下的一文件夹名,
//getServlet().getServletContext().getRealPath("upload")得到"upload"文件夹在服务器端的相对位置
//ff.getFileName()为保存时的文件名
Filefile=newFile(getServlet().getServletContext().getRealPath(
"upload"),ff.getFileName());
logger.debug(file.getPath());
//创建一个输出流
BufferedOutputStreambos=newBufferedOutputStream(
newFileOutputStream(file));
//从输入流中读取字节,通过输出流写入file文件中
intb=-1;
while((b=is.read())!=-1){
bos.write(b);
}
bos.close();
is.close();
returnmapping.findForward("success");
}
}
4编写配置文件struts-config.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstruts-configPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration1.2//EN""http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
<data-sources/>
<form-beans>
<form-beanname="uploadForm"type="zl.form.UploadForm"/>
</form-beans>
<action-mappings>
<actionpath="/upload"type="zl.action.UploadAction"name="uploadForm">
</action>
</action-mappings>
</struts-config>
其中/upload是upload_form.jsp提交到的地址相对应。
5运行
运行成功,console会打印所上传文件的namesizepath的值。
21:21:30,859DEBUGUploadAction:33-filename:Eclipse报表工具.bmp
21:21:30,859DEBUGUploadAction:34-filesize:1026198
21:21:30,859DEBUGUploadAction:45-D:\ProgramFiles\tomcat6.0\webapps\test2\upload\Eclipse报表工具.bmp