(八)Struts2 文件上传和下载

时间:2024-11-03 12:34:20

所有的学习我们必须先搭建好Struts2的环境(1、导入对应的jar包,2、web.xml,3、struts.xml)

第一节:Struts2 文件上传

Struts2 文件上传基于Struts2 拦截器实现;

Struts2 文件上传使用的是fileupload 组件;

Form 配置enctype="multipart/form-data";(这样就是以二进制来上传的)

Struts2 获取上传文件:name (name 是文件表单的name)

Struts2 获取上传文件名:name+FileName;

Struts2 获取上传文件的类型:name+ContentType;

例子:

struts.xml

<?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="manager" extends="struts-default"> <action name="upload" class="com.wishwzp.action.FileUploadAction">
<result name="success">/success.jsp</result> </action> </package> </struts>

FileUploadAction.java

 package com.wishwzp.action;

 import java.io.File;

 import org.apache.commons.io.FileUtils;

 import com.opensymphony.xwork2.ActionSupport;

 public class FileUploadAction extends ActionSupport{

     /**
*
*/
private static final long serialVersionUID = 1L; // 文件(这里的文件名必须要和前端的文件:<input type="file" name="wishwzp"/><br/>name一样)
private File wishwzp; // 文件名(name+FileName)
private String wishwzpFileName; // 文件类型(name+ContentType)
private String wishwzpContentType; public File getwishwzp() {
return wishwzp;
} public void setwishwzp(File wishwzp) {
this.wishwzp = wishwzp;
} public String getwishwzpFileName() {
return wishwzpFileName;
} public void setwishwzpFileName(String wishwzpFileName) {
this.wishwzpFileName = wishwzpFileName;
} public String getwishwzpContentType() {
return wishwzpContentType;
} public void setwishwzpContentType(String wishwzpContentType) {
this.wishwzpContentType = wishwzpContentType;
} @Override
public String execute() throws Exception {
System.out.println("文件名:"+wishwzpFileName);
System.out.println("文件类型:"+wishwzpContentType);
//上传到C盘中
String filePath="C:/"+wishwzpFileName;
//保存文件添加到文件中
File saveFile=new File(filePath);
//将wishwzp文件拷到saveFile中,这样数据就到C盘中了
FileUtils.copyFile(wishwzp, saveFile);
return SUCCESS;
} }

fileupload.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!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>Insert title here</title>
</head>
<body>
<!-- 这里enctype="multipart/form-data就是将数据以二进制上传 -->
<form action="upload" method="post" enctype="multipart/form-data">
文件:<input type="file" name="wishwzp"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>

success.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!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>Insert title here</title>
</head>
<body>
文件上传成功!
</body>
</html>

第二节:配置文件的大小及类型

配置可以上传哪些文件的信息以及最大上传的大小

<param name="allowedTypes">image/bmp,image/x-png,image/gif,image/jpg,image/jpeg</param>

<param name="maximumSize">81101</param>

例子:

struts.xml

 <?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="manager" extends="struts-default"> <action name="upload" class="com.wishwzp.action.FileUploadAction">
<result name="success">/success.jsp</result>
<result name="input">/fileupload.jsp</result> <interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/x-png,image/gif,image/jpg,image/jpeg</param>
<param name="maximumSize">81101</param>
</interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action> </package> </struts>

前端页面文件错误表达式:

<s:fielderror></s:fielderror>

例子:

fileupload.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!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>Insert title here</title>
</head>
<body>
<s:fielderror></s:fielderror>
<!-- 这里enctype="multipart/form-data就是将数据以二进制上传 -->
<form action="upload" method="post" enctype="multipart/form-data">
文件:<input type="file" name="wishwzp"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>

第三节:大文件上传

Struts2 文件上传大小默认是2M;

<constant name="struts.multipart.maxSize" value="20000000"></constant>

例子:

struts.xml

 <?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> <!-- 上传大小配置 -->
<constant name="struts.multipart.maxSize" value="20000000"></constant> <package name="manager" extends="struts-default"> <action name="upload" class="com.wishwzp.action.FileUploadAction">
<result name="success">/success.jsp</result>
<result name="input">/fileupload.jsp</result> </action> </package> </struts>

第四节:多文件上传

strutsl.xml

 <?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="manager" extends="struts-default">
<action name="uploads" class="com.wishwzp.action.FilesUploadAction">
<result name="success">/success.jsp</result>
<result name="input">/filesupload.jsp</result>
</action> </package> </struts>

FilesUploadAction.java

 package com.wishwzp.action;

 import java.io.File;

 import org.apache.commons.io.FileUtils;

 import com.opensymphony.xwork2.ActionSupport;

 public class FilesUploadAction extends ActionSupport{

     /**
*
*/
private static final long serialVersionUID = 1L; // 文件(这里的文件名必须要和前端的文件:<input type="file" name="wishwzp"/><br/>name一样)
private File[] wishwzp; // 文件名(name+FileName)
private String[] wishwzpFileName; // 文件类型(name+ContentType)
private String[] wishwzpContentType; public File[] getwishwzp() {
return wishwzp;
} public void setwishwzp(File[] wishwzp) {
this.wishwzp = wishwzp;
} public String[] getwishwzpFileName() {
return wishwzpFileName;
} public void setwishwzpFileName(String[] wishwzpFileName) {
this.wishwzpFileName = wishwzpFileName;
} public String[] getwishwzpContentType() {
return wishwzpContentType;
} public void setwishwzpContentType(String[] wishwzpContentType) {
this.wishwzpContentType = wishwzpContentType;
} @Override
public String execute() throws Exception {
for(int i=0;i<wishwzp.length;i++){
System.out.println("文件名:"+wishwzpFileName[i]);
System.out.println("文件类型:"+wishwzpContentType[i]);
//上传到C盘中
String filePath="C:/"+wishwzpFileName[i];
//保存文件添加到文件中
File saveFile=new File(filePath);
//将wishwzp文件拷到saveFile中,这样数据就到C盘中了
FileUtils.copyFile(wishwzp[i], saveFile);
}
return SUCCESS;
} }

filesupload.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!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>Insert title here</title>
</head>
<body>
<s:fielderror></s:fielderror>
<form action="uploads" method="post" enctype="multipart/form-data">
文件1:<input type="file" name="wishwzp"/><br/>
文件2:<input type="file" name="wishwzp"/><br/>
文件3:<input type="file" name="wishwzp"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>

第五节:Struts2 文件下载

返回的是文件流

<param name="contentDisposition">attachment;filename=${fileName}</param>

InputStream getInputStream()

struts.xml

 <?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> <constant name="struts.multipart.maxSize" value="20000000"></constant> <package name="manager" extends="struts-default">
<action name="download" class="com.wishwzp.action.FileDownloadAction">
<result type="stream">
<param name="contentDisposition">attachment;filename=${fileName}</param>
</result>
</action> </package> </struts>

FileDownloadAction.java

 package com.wishwzp.action;

 import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream; import com.opensymphony.xwork2.ActionSupport; public class FileDownloadAction extends ActionSupport{ /**
*
*/
private static final long serialVersionUID = 1L; private String fileName; public String getFileName() throws Exception{
fileName=new String(fileName.getBytes(),"ISO8859-1");
return fileName;
} public void setFileName(String fileName) {
this.fileName = fileName;
} public InputStream getInputStream()throws Exception{
File file=new File("C:/美女1.jpg");
this.fileName="美女1号";
return new FileInputStream(file);
} }

filedownload.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!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>Insert title here</title>
</head>
<body>
<a href="download">文件下载</a>
</body>
</html>