国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Struts2總結---文件上傳(單文件/多文件)、下載 (13)

2019-11-06 06:38:26
字體:
來源:轉載
供稿:網(wǎng)友

<一>簡述:

Struts2的文件上傳其實也是通過攔截器來實現(xiàn)的,只是該攔截器定義為默認攔截器了,所以不用自己去手工配置,<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>

<二>指定用戶上傳文件的大小,有兩種方式:

1)默認是在default.PRoperties 文件的 struts.multipart.maxSize=2097152  鍵值指定為2097152 也就是2M,通過計算 2097152/(1024*1024) = 2 M

那我們可以改變其默認值,只要在src目錄下,新建一個 struts.properties 文件,指定上傳大小 如下:

一次上傳只可以上傳10M,不管一次上傳多少個文件,按總和計算

2)在struts.xml文件中指定,如圖:

其實name就對應struts.properties的鍵,value對應 值

注意:如果即在struts.properties設定文件上傳大小,又在struts.xml 設定文件上傳大小,則struts.properties的優(yōu)先級高于struts.xml,一般在一處指定上傳大小即可,推薦 struts.properties

<三>Struts2之單文件上傳

1.fileupload.jsp

    <%@ 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>My JSP 'fileupload.jsp' starting page</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>           <!-- enctype 默認是 application/x-www-form-urlencoded -->           <form action="FileUpload2" enctype="multipart/form-data" method="post" >                                   用戶名:<input type="text" name="usename"> <br/>                     上傳文件:<input type="file" name="file1"><br/>                                         <input type="submit" value="提交"/>                      </form>                                         </body>      </html>  2.具體處理上傳的 FileUpload.java

package com.struts2.fileupload;    import java.io.File;  import java.io.FileInputStream;  import java.io.FileOutputStream;  import java.io.InputStream;  import java.io.OutputStream;    import org.apache.struts2.ServletActionContext;    import com.opensymphony.xwork2.ActionSupport;    /**  * 單個文件上傳  * @author Administrator  * 上傳文件其實是上傳了兩份,  *   * 首先將上傳的文件保存到 default.properties 文件中 struts.multipart.saveDir鍵指定的目錄中  * 默認是空的  * 保存在  Tomcat 6.0/work/Catalina/localhost/struts2目錄下以.tmp后綴名的文件  *   * 如果要在 struts.multipart.saveDir 指定目錄, 則可以在 src文件夾下 建一個 struts.properties,  * 覆蓋  default.properties 的某些鍵值  *   * 還有一份是 存放在自己設定的目錄下  */  public class FileUpload extends ActionSupport {            private String usename ;      private File file1 ; //具體上傳文件的 引用 , 指向臨時目錄中的臨時文件      private String file1FileName ;  // 上傳文件的名字 ,FileName 固定的寫法      private String file1ContentType ; //上傳文件的類型, ContentType 固定的寫法            public String getUsename() {          return usename;      }      public void setUsename(String usename) {          this.usename = usename;      }      public File getFile1() {          return file1;      }      public void setFile1(File file1) {          this.file1 = file1;      }      public String getFile1FileName() {          return file1FileName;      }      public void setFile1FileName(String file1FileName) {          this.file1FileName = file1FileName;      }      public String getFile1ContentType() {          return file1ContentType;      }      public void setFile1ContentType(String file1ContentType) {          this.file1ContentType = file1ContentType;      }            @Override      public String execute() throws Exception {          //獲取文件存儲路徑          String path = ServletActionContext.getRequest().getRealPath("/upload");          //輸出流          OutputStream os = new FileOutputStream(new File(path,file1FileName));          //輸入流          InputStream is = new FileInputStream(file1);                    byte[] buf = new byte[1024];          int length = 0 ;                    while(-1 != (length = is.read(buf) ) )          {              os.write(buf, 0, length) ;          }          is.close();          os.close();                    return SUCCESS;      }                      } 3.最終顯示結果的頁面,filedemo.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>      <%@ taglib prefix="s" uri="/struts-tags" %>            <%      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>My JSP 'filedemo.jsp' starting page</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>          上傳成功: <br/>          usename: <s:property value="usename" /><br/>          file: <s:property value="file1FileName"/><br/>          contentType: <s:property value="file1ContentType"/>                  </body>      </html>  

<四>Struts2之多文件上傳

1.fileupload.jsp

    <%@ 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>My JSP 'fileupload.jsp' starting page</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>           <!-- enctype 默認是 application/x-www-form-urlencoded -->           <form action="FileUpload2" enctype="multipart/form-data" method="post" >                                   用戶名:<input type="text" name="usename"> <br/>                     上傳文件:<input type="file" name="file1"><br/>                     上傳文件: <input type="file" name="file1"><br/> <!-- 兩個名字相同 都是file1 -->                    <input type="submit" value="提交"/>                      </form>                                         </body>      </html>  兩個上傳文件的name屬性值要是一樣的,后臺方便處理

2.具體處理上傳文件的FileUpload2.Java

多文件上傳用集合的方式

    package com.struts2.fileupload;            import java.io.File;      import java.io.FileInputStream;      import java.io.FileOutputStream;      import java.io.InputStream;      import java.io.OutputStream;      import java.util.List;            import org.apache.struts2.ServletActionContext;            import com.opensymphony.xwork2.ActionSupport;            /**      * 多文件上傳,用集合的方式      * @author Administrator      *      */            public class FileUpload2 extends ActionSupport {                    private String usename ;          private List<File> file1 ;          private List<String> file1FileName ;          private List<String> file1ContentType ;                    public String getUsename() {              return usename;          }          public void setUsename(String usename) {              this.usename = usename;          }          public List<File> getFile1() {              return file1;          }          public void setFile1(List<File> file1) {              this.file1 = file1;          }          public List<String> getFile1FileName() {              return file1FileName;          }          public void setFile1FileName(List<String> file1FileName) {              this.file1FileName = file1FileName;          }          public List<String> getFile1ContentType() {              return file1ContentType;          }          public void setFile1ContentType(List<String> file1ContentType) {              this.file1ContentType = file1ContentType;          }                    @Override          public String execute() throws Exception {                            //獲取文件存儲路徑              String path = ServletActionContext.getRequest().getRealPath("/upload");                            for(int i = 0 ; i < file1.size() ; i++ )              {                  OutputStream os = new FileOutputStream(new File(path,file1FileName.get(i)));                                    InputStream is = new FileInputStream(file1.get(i));                                    byte[] buf = new byte[1024];                  int length = 0 ;                                    while(-1 != (length = is.read(buf) ) )                  {                      os.write(buf, 0, length) ;                  }                                    is.close();                  os.close();                                }                            return SUCCESS;          }            }  3.用于顯示的界面filedemo.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>      <%@ taglib prefix="s" uri="/struts-tags" %>            <%      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>My JSP 'filedemo2.jsp' starting page</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>                    上傳成功:<br/>           usename:<s:property value="usename"/><br/>                    <!-- 遍歷值 -->                    <s:iterator value="file1FileName" id="f"> <!-- id是一個對象,目前是一個字符串集合  可任意命名 -->                                                       文件:<s:property value="#f"/> <br/>                       <!-- 這里也可以調(diào)用方法  <s:property value="#f.toUpperCase()"/> -->                    </s:iterator>                            </body>      </html>  

<三>文件下載

文件下載是一個很常見的功能,用struts2實現(xiàn)文件下載的步驟:

一)定義一個Action類,F(xiàn)ileDownload.Java

    package com.struts2.filedownload;            import java.io.InputStream;                  import org.apache.struts2.ServletActionContext;                  import com.opensymphony.xwork2.ActionSupport;            //文件下載      public class FileDownload extends ActionSupport{                    private int number ;                private String fileName;                public int getNumber() {              return number;          }                public void setNumber(int number) {              this.number = number;          }                    public String getFileName() {              return fileName;          }                public void setFileName(String fileName) {              this.fileName = fileName;          }                //返回一個輸入流,作為一個客戶端來說是一個輸入流,但對于服務器端是一個 輸出流          public InputStream getDownloadFile() throws Exception          {              if(1 == number)              {                 this.fileName = "Dream.jpg" ;                 //獲取資源路徑                 return ServletActionContext.getServletContext().getResourceAsStream("upload/Dream.jpg") ;              }                            else if(2 == number)              {                  this.fileName = "jd2chm源碼生成chm格式文檔.rar" ;                  //解解亂碼                  this.fileName = new String(this.fileName.getBytes("GBK"),"ISO-8859-1");                  return ServletActionContext.getServletContext().getResourceAsStream("upload/jd2chm源碼生成chm格式文檔.rar") ;              }              else                 return null ;          }                    @Override          public String execute() throws Exception {                            return SUCCESS;          }            }  二)在struts.xml文件中配置相關信息

    <struts>               <package name="struts2" extends="struts-default">                   <action name="FileDownload" class="com.struts2.filedownload.FileDownload">                 <result name="success" type="stream">                     <param name="contentType">text/plain</param>                     <param name="contentDisposition">attachment;fileName="${fileName}"</param>                     <param name="inputName">downloadFile</param>                     <param name="bufferSize">1024</param>                 </result>             </action>                  </package>               </struts>  

1.結果類型必須要寫成 type="stream"  ,與之對應的處理類是 org.apache.struts2.dispatcher.StreamResult

2.涉及到的參數(shù):

3.

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

     contentDisposition默認是 inline(內(nèi)聯(lián)的), 比如說下載的文件是文本類型的,就直接在網(wǎng)頁上打開,不能直接打開的才會打開下載框自己選擇

2)  attachment :下載時會打開下載框

3)  fileName="${fileName}" :在這定義的名字是一個動態(tài)的,該名字是顯示在下載框上的文件名字

4.<param name="inputName">downloadFile</param>,這個downloadFile名字要和FileDownload.java類中的getDownloadFile()方法名去掉get 一致

三)用于顯示下載的鏈接界面 filedownload.jsp

    <%@ 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>My JSP 'filedownload.jsp' starting page</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>                  <h2>文件下載內(nèi)容:</h2><br/>          Dream.jpg:<a href="FileDownload.action?number=1">點擊下載</a><br/>          jd2chm源碼生成chm格式文檔.rar:<a href="FileDownload.action?number=2">點擊下載2</a>                            </body>      </html>  


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 永春县| 许昌县| 那坡县| 合川市| 高阳县| 阿拉善盟| 绍兴县| 孙吴县| 西安市| 深水埗区| 泽州县| 泸州市| 敖汉旗| 邵阳县| 盐池县| 杭锦后旗| 南宫市| 盖州市| 英德市| 清涧县| 平安县| 高碑店市| 云和县| 白玉县| 遂川县| 建德市| 涿鹿县| 鹿泉市| 大同县| 化州市| 若羌县| 大洼县| 灵台县| 阜阳市| 贡嘎县| 米易县| 司法| 鄂伦春自治旗| 宜兰市| 霍城县| 什邡市|