/**
作者:Joe Vienneau
译者:Rifoo Technology(http://www.rifoo.com)
时间:2005-11-10
备注:转载请保留以上声明
**/
文件上传的简单范例
HTML
HTML页面需要做两件事情,首先,表单需要指定enctype="multipart/form-dataand",其次需要一个类型为file的<input>表单控件。
<form name="myForm" method="post"
action="/mywebapp/uploadMyFile.do"
enctype="multipart/form-data"> Select File: <input type="file" name="myFile">
</br> <input type="submit" value="Upload File"> </form>
JSP
上面的HTML标签用Struts标签代替就是以下代码:
<html:form action="/uploadMyFile.do"
enctype="multipart/form-data"> Select File: <html:file property="myFile"> </br> <html:submit value="Upload File"/> </html:form>
ActionForm
这个ActionForm需要一个FormFile类型的字段。
一般的ActionForm
import org.apache.struts.upload.FormFile; public class MyActionForm extends ActionForm { private FormFile myFile; public void setMyFile(FormFile myFile) { this.myFile = myfile; } public FormFile getMyFile() { return myFile; } }
动态ActionForms
在struts-config.xml文件中写上:
<form-bean name="myForm"
type="org.apache.struts.action.DynaActionForm"> <form-property name="myFile"
type="org.apache.struts.upload.FormFile"/> </form-bean>
在Action中需要怎么写呢?
其实没什么特殊的,就象和得到其他属性一样,从ActionForm中得到FormFile属性,得到后可以随意进行处理。比如我们可以从FileForm中得到文件名,文件大小,文件内容
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws Exception { MyActionForm myForm = (MyActionForm)form; // Process the FormFile FormFile myFile = myForm.getMyFile(); String contentType = myFile.getContentType(); String fileName = myFile.getFileName(); int fileSize = myFile.getFileSize(); byte[] fileData = myFile.getFileData(); ... }
文件上传的配置
在struts-config.xml的<controller>element中可以设置如下参数来配置文件上传:
bufferSize - 处理文件上传的缓冲区大小,单位是字节。
默认是4096byte。maxFileSize - 允许上传文件的大小。可以使用K,M,G为单位。
默认是250M。multipartClass - muiltpart请求处理器类的全局标识名。默认是org.apache.struts.upload.CommonsMultipartRequestHandler
tempDir - 处理文件上传的临时目录。
还有一种可选的文件上传插件的方式可提供使用,那就是实现
org.apache.struts.upload.MultipartRequestHandler接口。
可以在struts-config.xml的<controller>的multipartClass
来指定这个实现给接口的类。