Struts2.0实现的文件上传(单附件和多附件)以及附件下载功能
?????? --------------------------------------------------單附件上傳:----------------------------------------------------------------
Action類:
package com.yourcompany.struts.uponloadfile;
import java.io.BufferedInputStream;
?import java.io.BufferedOutputStream;
?import java.io.File;
?import java.io.FileInputStream;
?import java.io.FileOutputStream;
?import java.io.InputStream;
?import java.io.OutputStream;
?import java.util.Date;
?import org.apache.struts2.ServletActionContext;
?import com.opensymphony.xwork2.ActionSupport;
?public class FileUploadAction extends ActionSupport? {
???? private static final long serialVersionUID = 572146812454l ;
???? private static final int BUFFER_SIZE = 16 * 1024 ;
???
???? private File myFile;
???? private String contentType;
???? private String fileName;
???? private String imageFileName;
???? private String caption;
???
???? public void setMyFileContentType(String contentType)? {
???????? this .contentType = contentType;
??? }
???? //還有myFileContentType(上傳文件的MIME類型)和myFileFileName(上傳文件的文件名,該文件名不包括文件的路徑)。因此,<s:file name="xxx" />
???? //對應(yīng)Action類里面的xxx、xxxContentType和xxxFileName三個(gè)屬性。
???? public void setMyFileFileName(String fileName)? {
???????? this .fileName = fileName;
??? }
???????
???? public void setMyFile(File myFile)? {
???????? this .myFile = myFile;
??? }
???
???? public String getImageFileName()? {
???????? return imageFileName;
??? }
???
???? public String getCaption()? {
???????? return caption;
??? }
?
????? public void setCaption(String caption)? {
???????? this .caption = caption;
??? }
???
???? private static void copy(File src, File dst)? {
???????? try? {
??????????? InputStream in = null ;
??????????? OutputStream out = null ;
???????????? try? {???
????????????? //輸入到緩沖流
??????????????? in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
??????????????? out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
???????????????? byte [] buffer = new byte [BUFFER_SIZE];
???????????????? while (in.read(buffer) > 0 )? {
??????????????????? out.write(buffer);
??????????????? }
???????????? } finally? {
???????????????? if ( null != in)? {
??????????????????? in.close();
??????????????? }
????????????????? if ( null != out)? {
??????????????????? out.close();
??????????????? }
??????????? }
???????? } catch (Exception e)? {
??????????? e.printStackTrace();
??????? }
??? }
???
???? private static String getExtention(String fileName)? {
???????? int pos = fileName.lastIndexOf( "." );
???????? return fileName.substring(pos+1);//獲得后綴名
??? }
?
??? @Override
???? public String execute()????? {???????
??????? imageFileName = new Date().getTime() + getExtention(fileName);//合成圖片的名稱
??????? System.out.println("================="+imageFileName+"========="+ServletActionContext.getServletContext().getRealPath("WebRoot/UploadImages" ));
??????? File imageFile = new File(ServletActionContext.getServletContext().getRealPath( "/UploadImages") + "/" +imageFileName);
??????? copy(myFile, imageFile);
???????? return SUCCESS;
??? }
}
struts.xml配置:
<action name ="fileUpload" class ="com.yourcompany.struts.uponloadfile.FileUploadAction" >
???????????
????????????? <interceptor-ref name ="fileUpload" >
??????????????? <param name ="allowedTypes" >
?????????????????? image/bmp,image/png,image/gif,image/jpeg
??????????????? </param >
??????????? </interceptor-ref >?
??????????? <!-- <interceptor-ref name="timer"/>? 用于測試action的執(zhí)行時(shí)間 -->
?????????
??????????? <interceptor-ref name ="defaultStack" />???
??????????? <result name="input">/uploadfile_index.jsp</result >
??????????? <result name="success">/uploadfile_result.jsp </result >
??????? </action >
uploadfile_index.jsp:
jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>?
<%@ taglib uri="/struts-tags" prefix="s" %>
<%??
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>uploadfile_index.jsp</title>?
??????
??? <meta http-equiv="pragma" content="no-cache">?
??? <meta http-equiv="cache-control" content="no-cache">?
??? <meta http-equiv="exires" content="0">??????
??? <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">?
??? <meta http-equiv="description" content="This is my page">?
??? <!--?
??? <link rel="stylesheet" type="text/css" href="styles.css">?
??? -->?
?
? </head>?
????
? <body>?
??? 選擇上傳文件:類型是圖片
? <s:fielderror />
??? <s:form action ="fileUpload" method ="POST" enctype ="multipart/form-data" >
??????? <s:file name ="myFile"?? label ="Image File" />
??????? <s:textfield name ="caption" label ="Caption" />???????
??????? <s:submit />
??? </s:form >
?
? </body>?
</html>
uploadfile_result.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>?
<%@ taglib uri="/struts-tags" prefix="s" %>
<%??
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>uploadfile_result.jsp</title>?
??????
??? <meta http-equiv="pragma" content="no-cache">?
??? <meta http-equiv="cache-control" content="no-cache">?
??? <meta http-equiv="expires" content="0">??????
??? <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">?
??? <meta http-equiv="description" content="This is my page">?
??? <!--?
??? <link rel="stylesheet" type="text/css" href="styles.css">?
??? -->?
?
? </head>?
????
? <body>?
? <div style ="padding: 3px; border: solid 1px #cccccc; text-align: center" >
??????? <img src ='UploadImages/<s:property value ="imageFileName" /> ' />
??????? <br />
??????? <s:property value ="caption" />
??? </div >
? </body>?
</html>
--------------------------------------------------多附件上傳:----------------------------------------------------------------
Action類:
package com.yourcompany.struts.uponloadfile;
import java.io.BufferedInputStream;
?import java.io.BufferedOutputStream;
?import java.io.File;
?import java.io.FileInputStream;
?import java.io.FileOutputStream;
?import java.io.InputStream;
?import java.io.OutputStream;
import java.util.ArrayList;
?import java.util.Date;
import java.util.List;
?import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
?public class maxFileUploadAction extends ActionSupport? {
???? private static final long serialVersionUID = 572146812454l ;
???? private static final int BUFFER_SIZE = 16 * 1024 ;
???
???? private File[] uploads;
???? private String[] uploadFileNames;
???? private String[] uploadContentTypes;
???? public File[] getUpload()? { return this .uploads; }
????? public void setUpload(File[] uploads)? { this .uploads = uploads; }
?
????? public String[] getUploadFileName()? { return this .uploadFileNames; }
????? public void setUploadFileName(String[] uploadFileName)? { this .uploadFileNames = uploadFileName; }
?
????? public String[] getUploadContentType()? { return this .uploadContentTypes; }
????? public void setUploadContentType(String[] uploadContentType)? { this .uploadContentTypes = uploadContentType;
????? }
???? private static void copy(File src, File dst)? {
???????? try? {
??????????? InputStream in = null ;
??????????? OutputStream out = null ;
???????????? try? {???
????????????? //輸入到緩沖流
??????????????? in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
??????????????? out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
???????????????? byte [] buffer = new byte [BUFFER_SIZE];
???????????????? while (in.read(buffer) > 0 )? {
??????????????????? out.write(buffer);
??????????????? }
???????????? } finally? {
???????????????? if ( null != in)? {
??????????????????? in.close();
??????????????? }
????????????????? if ( null != out)? {
??????????????????? out.close();
??????????????? }
??????????? }
???????? } catch (Exception e)? {
??????????? e.printStackTrace();
??????? }
??? }
???
???? private static String getExtention(String fileName)? {
???????? int pos = fileName.lastIndexOf( "." );
???????? return fileName.substring(pos+1);//獲得后綴名
??? }
?
??? @Override
???? public String execute(){????
???? for(int i=0;i<3;i++){
?????? String imageFileName = new Date().getTime() +getExtention(uploadFileNames[i]);//合成圖片的名稱
??????? System.out.println("================="+imageFileName+"========="+ServletActionContext.getServletContext().getRealPath("WebRoot/UploadImages" ));
??????? File imageFile = new File(ServletActionContext.getServletContext().getRealPath( "/UploadImages") + "/" +imageFileName);
??????? copy(uploads[i], imageFile);
???? }????
???????? return SUCCESS;
??? }
}
struts.xml配置:
<action name ="maxfileUpload" class ="com.yourcompany.struts.uponloadfile.maxFileUploadAction" >
?<interceptor-ref name ="fileUpload" />
?<!--? <interceptor-ref name ="fileUploadStack" />? -->
? <interceptor-ref name ="defaultStack" />
?<result name="success">/uploadfile_maxresult.jsp </result >???
??????? </action >
jsp:
uploadfile_maxindex.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>?
<%@ taglib uri="/struts-tags" prefix="s" %>
<%??
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>uploadfile_maxindex.jsp</title>?
??????
??? <meta http-equiv="pragma" content="no-cache">?
??? <meta http-equiv="cache-control" content="no-cache">?
??? <meta http-equiv="exires" content="0">??????
??? <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">?
??? <meta http-equiv="description" content="This is my page">?
??? <!--?
??? <link rel="stylesheet" type="text/css" href="styles.css">?
??? -->?
?
? </head>?
????
? <body>?
? 選擇上傳文件:不限類型
? <s:form action ="maxfileUpload" method ="POST" enctype ="multipart/form-data" >
??? <s:file label ="File (1)" name ="upload" />
??? <s:file label ="File (2)" name ="upload" />
??? <s:file label ="File (3)" name ="upload" />
??? <s:submit />
</s:form >
?
? </body>?
</html>
uploadfile_maxresult.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>?
<%@ taglib uri="/struts-tags" prefix="s" %>
<%??
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>uploadfile_maxresult.jsp</title>?
??????
??? <meta http-equiv="pragma" content="no-cache">?
??? <meta http-equiv="cache-control" content="no-cache">?
??? <meta http-equiv="exires" content="0">??????
??? <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">?
??? <meta http-equiv="description" content="This is my page">?
??? <!--?
??? <link rel="stylesheet" type="text/css" href="styles.css">?
??? -->?
?
? </head>?
????
? <body>?
?<h4>上傳成功</h4>
?
? </body>?
</html>
--------------------------------------------------附件下載:----------------------------------------------------------------
Action類:
package com.yourcompany.struts.filedown;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
public class Filedown implements Action {
private String fileName;// 初始的通過param指定的文件名屬性
private String inputPath;// 指定要被下載的文件路徑
public InputStream getInputStream() throws Exception {
// 通過 ServletContext,也就是application 來讀取數(shù)據(jù)
return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
}
public String execute() throws Exception {
return SUCCESS;
}
public void setInputPath(String value) {
inputPath = value;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
/** 提供轉(zhuǎn)換編碼后的供下載用的文件名 */
public String getDownloadFileName() {
String downFileName = fileName;
try {
downFileName = new String(downFileName.getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return downFileName;
}
}
struts.xml配置:
<!-- 下載現(xiàn)有文件 -->
<action name="download3" class="com.yourcompany.struts.filedown.Filedown">
<param name="inputPath">/download/系統(tǒng)說明.doc</param>
<!-- 初始文件名 -->
<!-- 可以載頁面?zhèn)魅?-->
<!-- <param name="fileName">系統(tǒng)說明.doc</param> -->
<result name="success" type="stream">
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>
<param name="inputName">inputStream</param>
<!-- 使用經(jīng)過轉(zhuǎn)碼的文件名作為下載文件名,downloadFileName屬性
對應(yīng)action類中的方法 getDownloadFileName() -->
<param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
<param name="bufferSize">4096</param>
</result>
</action>
JSP:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
??? <title>filedown.jsp</title>
??
</head>
<body>???
<a href=" <s:url value="download3.action"> <s:param name="fileName">系統(tǒng)說明.doc</s:param> </s:url>">download</a>
</body>
</html>
?
?
總結(jié)
以上是生活随笔為你收集整理的Struts2.0实现的文件上传(单附件和多附件)以及附件下载功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fire Workflow FAQ
- 下一篇: CSS基础教程(企业内部培训)