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&#25253;&#34920;&#24037;&#20855;.bmp

21:21:30,859DEBUGUploadAction:34-filesize:1026198

21:21:30,859DEBUGUploadAction:45-D:\ProgramFiles\tomcat6.0\webapps\test2\upload\Eclipse&#25253;&#34920;&#24037;&#20855;.bmp

相关推荐