1.开发jsp页面,首先在页面顶部设置编码格式以及添加Struts html标签库支持:
<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
upload.jsp页面代码为:
<%@ page language="java" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>upload</title>
</head>
<body>
<html:form action="uploadFile" enctype="multipart/form-data">
<html:file property="myFile"></html:file>
<html:submit value="上传"></html:submit>
</html:form>
</body>
</html>
注意:<html:form>标签中的enctype属性要设置为multipart/form-data,这样表单将会以二进制流的方式处理表单数据。
2.开发ActionForm,用于保存页面提交的数据。
在JSP页面 ,我们运用的是<html:file>标签,在ActionForm中,要用到FormFile类型。
import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;
public class uploadForm extends ActionForm{
private FormFile myFile;
public FormFile getMyFile() {
return myFile;
}
public void setMyFile(FormFile myFile) {
this.myFile = myFile;
}
}
注意:ActionForm中的变量名要与jsp页面属性名相同。
3.开发控制器Action。
public class uploadAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
uploadForm upForm = (uploadForm) form;// 表单
String path = this.getServlet().getServletConfig().getInitParameter(
"uploadPath");// 获取配置文件中的文件保存路径
InputStream inStream = upForm.getMyFile().getInputStream();// 输入流
FileOutputStream outStream = new FileOutputStream(path
+ upForm.getMyFile().getFileName());// 输出流
response.setCharacterEncoding("GBK");
PrintWriter outPrintWriter = response.getWriter();
byte buffer[] = new byte[1024];
int count = 0;
try {
while ((count = inStream.read(buffer)) > 0) {
outStream.write(buffer, 0, count);
}
outStream.close();
upForm.getMyFile().destroy();
outPrintWriter.print("上传成功!");
} catch (Exception e) {
outPrintWriter.print(e.getMessage());
}
return null;
}
}
4.相关配置。
(1)web.xml中配置上传文件保存路径
在web.xml配置文件中的 <servlet>中添加配置:
<init-param>
<param-name>uploadPath</param-name>
<param-value>D:/upload/</param-value>
</init-param>
(2)在struts-config.xml中配置form-bean及acton
在struts-config.xml中配置form-bean:
<form-beans>
<form-bean name="uploadForm" type="%package%.uploadForm"></form-bean>
</form-beans>
在struts-config.xml中配置action:
<action-mappings>
<action attribute="uploadForm" name="uploadForm"
path="/uploadFile"
scope="request"
type="%package%.uploadAction"></action>
</action-mappings>
%package%代表类所在的包。