程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JavaEE中struts2完成文件上傳下載功效實例解析

JavaEE中struts2完成文件上傳下載功效實例解析

編輯:關於JAVA

JavaEE中struts2完成文件上傳下載功效實例解析。本站提示廣大學習愛好者:(JavaEE中struts2完成文件上傳下載功效實例解析)文章只能為提供參考,不一定能成為您想要的結果。以下是JavaEE中struts2完成文件上傳下載功效實例解析正文


本文實例為年夜家分享了struts2完成文件上傳下載的詳細完成代碼,供年夜家參考,詳細內容以下

1、文件上傳

struts提交的文件組件上傳,
前台:
1)、提交方法POST
2)、表單類型 multipart/form-data
3)、input type=file
後台:
Apache供給的FileUpload組件

焦點類:
FileItemFactory FileItem的工場
ServletFileUpload servlet 中的文件上傳的焦點類
FileItem 封裝了上傳的表單文件項的信息
總之 文件上傳,處置起來比擬費事

Struts的文件上傳
文件上傳攔阻器贊助我們晚場了文件上傳的功效

<interceptor
   name="fileUpload"
 class="org.apache.structs2.interceptor.FileUploadInterceptor"/> 

upload.xml

<struts>

 <package name="upload_" extends="struts-default">
  <!-- 留意: action 的稱號不克不及用症結字"fileUpload" -->
  <action name="fileUploadAction" class="cn.itcast.e_fileupload.FileUpload">

   <!-- 限制運轉上傳的文件的類型 -->
   <interceptor-ref name="defaultStack">

    <!-- 限制運轉的文件的擴大名 -->
    <param name="fileUpload.allowedExtensions">txt,jpg,jar</param>

    <!-- 限制運轉的類型 【與下面同時應用,取交集】
    <param name="fileUpload.allowedTypes">text/plain</param>
    -->

   </interceptor-ref>

   <result name="success">/e/success.jsp</result>

   <!-- 設置裝備擺設毛病視圖 -->
   <result name="input">/e/error.jsp</result>
  </action>
 </package> 
</struts>

upload.jsp

<body>
 <form action="${pageContext.request.contextPath }/fileUploadAction" method="post" enctype="multipart/form-data">
  用戶名:<input type="text" name="userName"><br/>
  文件:<input type="file" name="file1"><br/>

  <input type="submit" value="上傳">
 </form>
 </body>

error.jsp

 <body>
 error.jsp<br/>
 <!-- 檢查struts框架在運轉時代發生的一切毛病信息 -->
 <%@ taglib uri="/struts-tags" prefix="s" %>
 <s:fielderror></s:fielderror>
 </body>
success.jsp
<body>
 success.jsp
 </body>

焦點代碼
FileUpload .class

public class FileUpload extends ActionSupport {

 // 對應表單:<input type="file" name="file1">
 private File file1; 
 // 文件名
 private String file1FileName;
 // 文件的類型(MIME)
 private String file1ContentType;
 public void setFile1(File file1) {
  this.file1 = file1;
 }
 public void setFile1FileName(String file1FileName) {
  this.file1FileName = file1FileName;
 }
 public void setFile1ContentType(String file1ContentType) {
  this.file1ContentType = file1ContentType;
 }


 @Override
 public String execute() throws Exception {
  /******拿到上傳的文件,停止處置******/
  // 把文件上傳到upload目次

  // 獲得上傳的目次途徑
  String path = ServletActionContext.getServletContext().getRealPath("/upload");
  // 創立目的文件對象
  File destFile = new File(path,file1FileName);
  // 把上傳的文件,拷貝到目的文件中
  FileUtils.copyFile(file1, destFile);

  return SUCCESS;
 }
}

文件上傳處置細節

a.文件年夜小限制
structs默許支撐的文件上傳最年夜是2M,經由過程常量修正:

    <!-- 4. 修正上傳文件的最年夜年夜小為30M -->
    <constant name="struts.multipart.maxSize" value="31457280"/>

b.限制上傳文件的許可類型
需求:只許可txt/jpg後綴的文件
攔阻器:注入參數從而限制文件上傳類型

 <!-- 限制運轉上傳的文件的類型 -->
   <interceptor-ref name="defaultStack">

    <!-- 限制運轉的文件的擴大名 -->
    <param name="fileUpload.allowedExtensions">txt,jpg,jar</param>

    <!-- 限制運轉的類型 【與下面同時應用,取交集】
    <param name="fileUpload.allowedTypes">text/plain</param>
    -->

   </interceptor-ref>

二、文件的下載

struts文件下載,2種方法:
方法1:經由過程response對象向閱讀器寫入字撙節數據;設置下載的呼應頭
方法2:struts的方法

struts的文件下載:

<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>

起首留意在webroot目次下新建 upload 文件夾,把你要供給下載的文件放到該文件夾下,

upload.xml

<action name="down_*" class="cn.itcast.e_fileupload.DownAction" method="{1}">
   <!-- 列表展現 -->
   <result name="list">/e/list.jsp</result>
   <!-- 下載操作 -->
   <result name="download" type="stream">

    <!-- 運轉下載的文件的類型:指定為一切的二進制文件類型 -->
    <param name="contentType">application/octet-stream</param>

    <!-- 對應的是Action中屬性: 前往流的屬性【其實就是getAttrInputStream()】 -->
    <param name="inputName">attrInputStream</param>

    <!-- 下載頭,包含:閱讀器顯示的文件名 -->
    <param name="contentDisposition">attachment;filename=${downFileName}</param>

    <!-- 緩沖區年夜小設置 -->
    <param name="bufferSize">1024</param>
   </result>
  </action>


list.jsp

<body>
 <table border="1" align="center">
  <tr>
   <td>編號</td>
   <td>文件名</td>
   <td>操作</td>
  </tr>
  <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  <c:forEach var="fileName" items="${fileNames}" varStatus="vs">
   <tr>
    <td>${vs.count }</td>
    <td>${fileName }</td>
    <td>
     <!-- 構建一個url -->
     <c:url var="url" value="down_down">
      <c:param name="fileName" value="${fileName}"></c:param>
     </c:url>

     <a href="${url }">下載</a>
    </td>
   </tr>
  </c:forEach>
 </table>
 </body>

DownAction

/**
 * 文件下載
 * 1. 顯示一切要下載文件的列表
 * 2. 文件下載
 *
 */
public class DownAction extends ActionSupport {


 /*************1. 顯示一切要下載文件的列表*********************/
 public String list() throws Exception {

  //獲得upload目次途徑
  String path = ServletActionContext.getServletContext().getRealPath("/upload");
  // 目次對象
  File file = new File(path);
  // 獲得一切要下載的文件的文件名
  String[] fileNames = file.list();
  // 保留
  ActionContext ac = ActionContext.getContext();
  // 獲得代表request的map (第二種方法)
  Map<String,Object> request= (Map<String, Object>) ac.get("request");
  request.put("fileNames", fileNames);
  return "list";
 }


 /*************2. 文件下載*********************/

 // 1. 獲得要下載的文件的文件名
 private String fileName;
 public void setFileName(String fileName) {
  // 處置傳入的參數中成績(get提交)
  try {
   fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
  } catch (UnsupportedEncodingException e) {
   throw new RuntimeException(e);
  }
  // 把處置好的文件名,賦值
  this.fileName = fileName;
 }

 //2. 下載提交的營業辦法 (在struts.xml中設置裝備擺設前往stream)
 public String down() throws Exception {
  return "download";
 }

 // 3. 前往文件流的辦法
 public InputStream getAttrInputStream(){
  return ServletActionContext.getServletContext().getResourceAsStream("/upload/" + fileName);
 }

 // 4. 下載顯示的文件名(閱讀器顯示的文件名)
 public String getDownFileName() {
  // 須要停止中文編碼
  try {
   fileName = URLEncoder.encode(fileName, "UTF-8");
  } catch (UnsupportedEncodingException e) {
   throw new RuntimeException(e);
  }
  return fileName;
 }


}

以上就是本文的全體內容,願望對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved