Struts上面自带了上传和下载功能,使用非常方便
下面做一个简单的上传下载例子:
单文件上传:
首先配置Struts中核心控制器filter
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>StrutsUpload</display-name>
<filter>
<filter-name>Struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
action:
package action;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import com.opensymphony.xwork2.ActionSupport;
/**
* @Author:Z.J.
* @Date:2016年3月14日 下午8:38:06
* 说明
*/
public class FileUpLoadAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private File file;//文件,与页面中input的name一定要保持一致
private String fileFileName;
private String fileContentType;
private String fileDescript;
public String upload(){
System.out.println("上传功能");
System.out.println(file);
System.out.println(fileFileName);
System.out.println(fileContentType);
System.out.println(fileDescript);
//保存文件
try {
FileUtils.copyFile(file, new File("/Users/zjing/ZWorkspace/zjImage/"+fileFileName));
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
}
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;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
public String getFileDescript() {
return fileDescript;
}
public void setFileDescript(String fileDescript) {
this.fileDescript = fileDescript;
}
}
jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传</title>
</head>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file"/><br/>
描述:<input type="text" name="fileDescript"/><br/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传成功</title>
</head>
<body>
<h3>上传成功!</h3>
</body>
</html>
index.jsp
struts.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "struts-2.3.dtd" >
<struts>
<!-- 修改临时文件目录 -->
<constant name="struts.multipart.saveDir" value="/Users/zjing/ZWorkspace/zjTemp"></constant>
<package name="file" namespace="/" extends="struts-default" >
<!-- 单文件上传 -->
<action name="upload" class="action.FileUpLoadAction" method="upload">
<result>/index.jsp</result>
</action>
</package>
</struts>
多文件上传:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>多文件上传</title>
</head>
<body>
<form action="upload2" method="post" enctype="multipart/form-data">
文件1:<input type="file" name="file"/><br/>
文件2:<input type="file" name="file"/><br/>
文件3:<input type="file" name="file"/><br/>
描述:<input type="text" name="descript"/>
<br/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
action
package action;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import com.opensymphony.xwork2.ActionSupport;
/**
* @Author:Z.J.
* @Date:2016年3月14日 下午9:13:44
* 多文件上传
*/
public class MultiUploadAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private File[] file;
private String[] fileFileName;
private String[] fileContentType;
private String descript;
//多文件上传
public String multiUpload() throws IOException{
if (file!=null) {
for (int i = 0; i < file.length; i++) {
System.out.println(file[i]);
System.out.println(fileFileName[i]);
System.out.println(fileContentType[i]);
//保存文件
FileUtils.copyFile(file[i], new File("/Users/zjing/ZWorkspace/zjImage/"+fileFileName[i]));
}
System.out.println(descript);
}
return SUCCESS;
}
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;
}
public String[] getFileContentType() {
return fileContentType;
}
public void setFileContentType(String[] fileContentType) {
this.fileContentType = fileContentType;
}
public String getDescript() {
return descript;
}
public void setDescript(String descript) {
this.descript = descript;
}
}
配置action:
<!-- 多文件上传 -->
<action name="upload2" class="action.MultiUploadAction" method="multiUpload">
<result>/index.jsp</result>
</action>
Struts下载
action
package action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import com.opensymphony.xwork2.ActionSupport;
/**
* @Author:Z.J.
* @Date:2016年3月15日 下午8:50:20
* 下载的action
*/
public class DownLoadAction extends ActionSupport{
private static final long serialVersionUID = 1L;
//用于保存文件名
private String fileName;
//下载的方法
public String down() throws Exception{
System.out.println("下载文件");
return "down";//发出二进制数据流
}
//给SteamResult的inputName 属性提供一个getter方法,用于返回输入流
public InputStream getFileStream(){
try {
File file = new File("/Users/zjing/ZJ壁纸/hualu.jpg");
fileName = file.getName();
FileInputStream fis = new FileInputStream(file);
return fis;
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
//提供一个getter方法用于给struts.xml 文件获取文件名
public String getFileName() {
return fileName;
}
}
在struts.xml中配置action
<!-- 文件下载 -->
<action name="down" class="action.DownLoadAction" method="down">
<result name="down" type="stream">
<!-- 下载的文件类型:通用的可以使用二进制类型 -->
<param name="contentType">application/octet-stream</param>
<!-- 下载的提示框 -->
<param name="contentDisposition">attachment;filename=${fileName}</param>
<!-- 需要下载的文件输入流 -->
<param name="inputName">fileStream</param>
<!-- 缓存区大小 -->
<param name="bufferSize">512</param>
</result>
</action>