与通过Servet进行上传文件比较起来,Struts的上传文件就简单很多
- 首先准备 upload.jsp
上传一定要为form加上enctype="multipart/form-data",表示提交的数据是二进制的
并且必须是method="post"
使用struts的s:file标签标识上传文件框
这里name使用doc会和服务端的相应代码匹配<s:file name="doc" label="upload" />
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <%@page isELIgnored="false" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <body> <form action="upload" method="post" enctype="multipart/form-data"> 上传文件 : <input type="file" name="doc" /> <br> <input type="submit" value="上传"> </form> </body> </html>
- UploadAction
在upload.jsp中file字段对应的name是"doc"
所以在action中,必须准备3个属性,分别是
File doc;
String docFileName;
String docContentType;
属性名字不能使用其他的,必须基于“doc"
然后为这3个属性提供getter setter
package com.how2java.action; import java.io.File; import java.io.IOException; import java.util.UUID; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; public class UploadAction { File doc; String docFileName; String docContentType; public File getDoc() { return doc; } public void setDoc(File doc) { this.doc = doc; } public String getDocFileName() { return docFileName; } public void setDocFileName(String docFileName) { this.docFileName = docFileName; } public String getDocContentType() { return docContentType; } public void setDocContentType(String docContentType) { this.docContentType = docContentType; } public String upload() { System.out.println(doc); System.out.println(docFileName); System.out.println(docContentType); return "success"; } }
- struts.xml
为upload路径配置UploadAction,并返回success.jsp
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="basicstruts" extends="struts-default"> <action name="showProduct" class="com.how2java.action.ProductAction" method="show"> <result name="show">show.jsp</result> </action> <action name="addProduct" class="com.how2java.action.ProductAction" method="add"> <result name="input">addProduct.jsp</result> <result name="show">show.jsp</result> </action> <action name="upload" class="com.how2java.action.UploadAction" method="upload"> <result name="success">success.jsp</result> </action> </package> </struts>
- success.jsp
分别显示doc,docFileName,docContentType
<%@page isELIgnored="false"%> uploaded success ${doc} <br/> ${docFileName} <br/> ${docContentType} <br/>
- 测试
重启tomcat,访问页面,进行文件上传提交
http://127.0.0.1:8080/struts/upload.jsp
第一行表示上传后被放在tomcat的work目录下,并且以.tmp命名
第二行是上传文件本来的名字
第三行是上传文件的mime type