文件上传要求:
- 表单设为post
- enctype="multipart/form-data"
- 服务器端File对应的名字与jsp中指定的文件name相同(对于真正上传的文件), 而String *FileName对应上传的文件名(*表示jsp中文件name)
- 添加Jar包(commons-io-1.3.2.jar),否则上传失败,抛出io相关类找不到的信息。 否则文件上传失败
首先,写一个upload.jsp:
引入标签库:
<%@ taglib uri="/struts-tags" prefix="s"%>
body体中(struts标签默认表单提交方式为post):
<body>
<s:form action="upload" enctype="multipart/form-data">
<s:file name="file"></s:file>
<s:submit value="submit"></s:submit>
</s:form>
</body>
对应的UploadAction为:
package com.test.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport
{
private File file; // 对应真正上传的文件
private String fileFileName; // 对应上传的文件名
public File getFile()
{
return file;
}
public void setFile(File file)
{
this.file = file;
}
public String getFileFileName()
{
return fileFileName;
}
public void setFileFileName(String fileFileName)
{
this.fileFileName = fileFileName;
}
@Override
public String execute() throws Exception
{
InputStream is = new FileInputStream(file);
OutputStream os = new FileOutputStream("E:\\Desktop\\" + fileFileName);
byte[] buffer = new byte[1024];
int length = 0;
while(-1 != (length = is.read(buffer)))
{
os.write(buffer, 0, length);
}
os.close();
is.close();
return SUCCESS;
}
}
结果页面很简单uploadResult.jsp:
<body>
Upload success~~
</body>
struts对应的配置为:
<action name="upload" class="com.test.action.UploadAction">
<result name="success">/uploadResult.jsp</result>
</action>
web.xml一如既往从struts的部分开始就没变过:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
最后引入struts2中的第三方JAR包,在原有六个包的情况下,添加commons-io-1.3.2.jar,打开http://localhost:8080/struts2/upload.jsp,选择文件即可完成上传。