文件上传视图 :
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页</title>
</head>
<body>
<form action="upload.action" method="post" enctype="multipart/form-data">
文件:<input type="file" name="logo"/>
<input type="submit" value="提交">
</form>
文件下载: ${logoFileName }</a><br>
<a>文件大小:${fileSize }</a><br>
<a>文件上传时间:${uploadDate }</a><br>
<a href="download?logoFileName=${downFileName } ">查看</a>
</body>
</html>
首先,表单的enctype设置为multipart/form-data,要使得文件上传拦截器成功处理文件上传,这个就必须设置。然后要注意的是表单的action方法上传和文件上传字段的名称(即logoFileName )。我们需要这些信息来创建action方法和struts配置。
文件下载视图:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>文件下载</title>
</head>
<body>
文件下载:<a href="download?logoFileName=${downFileName }">${logoFileName }</a><br>
<a>文件大小:${fileSize }KB</a><br>
<a>文件上传时间:${uploadDate }</a>
</body>
</html>
创建Action类:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
//上传和下载文件
public class UploadAction extends ActionSupport{
private File logo;
private String logoFileName;
private String logoContentType;
private String fileSize;
private String uploadDate;
public void setFileSize(String fileSize) {
this.fileSize = fileSize;
}
public String getFileSize() {
return fileSize;
}
public void setUploadDate(String uploadDate) {
this.uploadDate = uploadDate;
}
public String getUploadDate() {
return uploadDate;
}
private static String downFileName;
public String getDownFileName() {
return downFileName;
}
public void setDownFileName(String downFileName) {
this.downFileName = downFileName;
}
//上传文件
public String uploadFile(){
//String path=ServletActionContext.getRequest().getRealPath("/upload");
String path="E:/upload";
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
uploadDate = df.format(new Date());
System.out.println(uploadDate);// new Date()为获取当前系统时间
fileSize = (logo.length()/1024+1)+"KB";
System.out.println("文件大小:"+fileSize);
System.out.println(logoFileName);
downFileName=logoFileName;
System.out.println(downFileName);
try {
FileUtils.copyFile(logo, new File(path,logoFileName));
} catch (IOException e) {
e.printStackTrace();
}
return "success";
}
//ָ指定下载路径
public InputStream getInputStream() throws FileNotFoundException{
String path="E:/upload";
System.out.println(path+"/"+downFileName);
return new FileInputStream(path+"/"+downFileName);
}
public String downloadFile(){
return "success";
}
public File getLogo() {
return logo;
}
public void setLogo(File logo) {
this.logo = logo;
}
public String getLogoFileName() {
return logoFileName;
}
public void setLogoFileName(String logoFileName) {
this.logoFileName = logoFileName;
}
public String getLogoContentType() {
return logoContentType;
}
public void setLogoContentType(String logoContentType) {
this.logoContentType = logoContentType;
}
}
默认情况下,FileUpload拦截器为你提供三个参数,它们分别按以下方式命名:
1. [文件名参数] - 这是用户已上传的实际文件。在这个例子中它将是“logoFile”
2. [文件名参数]ContentType - 这是上传的文件的内容类型。在这个例子中,它将是“logoContentType”
3. [文件名参数]FileName - 这是上传的文件的名称。在这个例子中,它将是“logoFileName”
struts配置:
<!-- 上传文件 -->
<action name="upload" class="uploadAction" method="uploadFile">
<result name="success" >/hello.jsp</result>
</action>
<!-- 下载文件 -->
<action name="download" class="uploadAction" method="downloadFile">
<result type="stream">
<param name="inputName">inputStream</param>
<param name="contentDisposition">
attachment;filename=${uploadFileName}
</param>
</result>
</action>
修改上传文件的大小:
<constant name="struts.multipart.maxSize" value="100000000" />