1. 程式人生 > >JAVAEE struts2的簡單檔案上傳與下載

JAVAEE struts2的簡單檔案上傳與下載

這是一個關於struts2的檔案下載和上傳功能案例,只是簡單的實現功能,並無複雜的處理,如重名、檔名不能含特殊字元等。
1.web.xml配置
<filter>
<!-- 配置struts核心過濾器 -->
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.上傳頁面index.jsp
<form action="${pageContext.request.contextPath }/fileUpload" method="post" enctype="multipart/form-data">
	  		上傳檔案:<input type="file" name="file1"/><br/>
	  		<input type="submit" value="上傳"/>
  			
 </form></span>

3.上傳的Action程式碼
public class FileUploadAction extends ActionSupport{
	
	private File file1;//上傳的檔案(欄位名與表單元素名一致,自動封裝)
	private String file1FileName;//上傳檔案的檔名
	private String file1ContentType;//上傳檔案的型別
	
	//給欄位set方法
	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 {
		
		//獲取上傳目錄路徑
		String path = ServletActionContext.getServletContext().getRealPath("/upload");
		
		//建立上傳的檔案物件
		File file = new File(path,file1FileName);
		
		//呼叫工具類的方法上傳檔案
		/*
		 * 第一個引數:上傳的原檔案
		 * 第二個引數:上傳的目錄檔案
		 */
		FileUtils.copyFile(file1, file);
		return super.execute();
	}
}
4.下載的Action程式碼
public class FileDownAction extends ActionSupport{
	private String path;
	/**
	 * 獲取檔案列表
	 * @return
	 */
	public String list(){
		//獲取上傳的檔案目錄路徑
		path = ServletActionContext.getServletContext().getRealPath("/upload");
	
		//建立目錄物件
		File file = new File(path);
		
		//獲取目錄中所有的檔案
		String fileNames[] = file.list();
		
		//將檔名儲存到域物件
		ActionContext.getContext().getContextMap().put("files", fileNames);
		
		return "files";
		
		
	}
	
	/**
	 * 儲存下載的檔名
	 */
	private String fileName;
	public void setFileName(String name) {
		try {
			//處理中文編碼
			name = new String(name.getBytes("ISO8859-1"),"UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		this.fileName = name;
	}
	
	/**
	 * 下載
	 * @return
	 */
	public String down(){
		return "down";
	}
	
	/**
	 * 獲取流,與配置檔案的流對應
	 * @return
	 */
	public InputStream getMyStream(){
		 InputStream asStream = ServletActionContext.getServletContext().getResourceAsStream("/upload/"+this.fileName);
		 return asStream;
	}
	

	/**
	 * 下載顯示的檔名
	 * 與配置檔案總的名稱對應
	 * @return
	 */
	public String getDownFileName(){
		try {
			return URLEncoder.encode(this.fileName,"UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			return null;
		}
	}
}
5.struts配置檔案struts.xml

<struts>
<!-- 配置上傳大小限制:10M -->
<constant name="struts.multipart.maxSize" value="10485760"></constant>
  <package name="upload_down" abstract="false" extends="struts-default">
  <global-results>
  <!-- 當上傳/下載失敗時候,struts會捕獲錯誤 -->
  <result name="input">/message.jsp</result>
  </global-results>
  <!-- 配置upload Action -->
 <action name="fileUpload" class="cn.app.action.FileUploadAction">
 
  <interceptor-ref name="defaultStack">
  <!-- 限制上傳檔案的型別 -->
  <!--  <param name="fileUpload.allowedExtensions">txt,png</param>-->
 </interceptor-ref>
  <result name="success" type="dispatcher">/down_list</result>
  </action>
  
  <!-- 配置down Action -->
  <action name="down_*" class="cn.app.action.FileDownAction" method="{1}"> 
  <result name="files">/list.jsp</result>
  <!-- 下載結果處理,返回"stream" -->
  <result name="down" type="stream">
  <!-- 設定下載的返回類,設定為二進位制,即所有的型別都可以下載 -->
 <param name="contentType">application/octet-stream</param>
  <!-- 設定下載時用到的流,對應Action裡的流的屬性 -->
  <param name="inputName">myStream</param>
  <!-- 下載顯示的檔名稱 -->
  <param name="contentDisposition">attachment;fileName=${downFileName}</param>
  <!-- 設定緩衝區大小 -->
  <param name="bufferSize">1024</param>
  </result>
  </action>
  </package>
  
</struts>
6.下載檔案列表jsp
<%@taglib uri="/struts-tags" prefix="s" %>
  <table border="1" cellspacing="0">
  <tr>
  <th></th>
  <th>檔名</th>
  <th>下載</th>
 </tr>
  <s:iterator var="file" value="#files" status="s">
  <tr>
  <td><s:property value="#s.count"/></td>
  <td><s:property value="#file"/></td>
  <td><s:a href="down_down?fileName=%{#file}">下載</s:a></td>
  </tr>
  </s:iterator>
  </table >

7.期間遇到了一點小問題,跟大家分享一下,是一個非常低階的錯誤
警告: Error setting expression 'file1' with value '[Ljava.lang.String;@2fc5809e'
ognl.MethodFailedException: Method "setFile1" failed for object [email protected] [java.lang.NoSuchMethodException: cn.app.action.FileUploadAction.setFile1([Ljava.lang.String;)]
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1289)
at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1478)
...部分
錯誤源頭
<form action="${pageContext.request.contextPath }/fileUpload" method="post" enctype="multipart/form-data">
</span>上傳使用者:<input type="text" name="userName"/><br/>
</span>上傳檔案:<input type="file" name="file1"/><br/>
<input type="submit" value="上傳"/>
 
</form>
這是正確的程式碼,而我的錯誤是 form 標籤的 enctype 屬性值錯了,我寫成了 "mutipart/form-data",少了個 l ,這是一個非常低階的錯誤。
一開始沒注意,一直都以為是 form 表單裡的元素有問題,其實不然。
*新手程式碼,如有不足請多多指教,謝謝!
*部落格新手,還不太會編輯器的功能,所以排版不好。

相關推薦

JAVAEE struts2簡單檔案下載

這是一個關於struts2的檔案下載和上傳功能案例,只是簡單的實現功能,並無複雜的處理,如重名、檔名不能含特殊字元等。1.web.xml配置<filter><!-- 配置struts核

struts2實現檔案下載功能

一、Demo介紹 基於struts2框架,實現多檔案的上傳和下載功能。 實現原理圖: 部分介面圖: 上傳成功及下載頁面: 二、主要程式碼 uploadFile.jsp:在form表單中包含一個文字框(上傳使用者的姓名)和兩個檔案上傳選項. <%@

Struts2檔案下載

1、檔案上傳三種方式: 將檔案以二進位制的形式儲存到資料庫中 activiti工作流框架  將檔案儲存到專門檔案伺服器(存放檔案用的Linux系統)中  直接將檔案儲存到伺服器(tomcat所在伺服器)中 2、檔案上傳的一個例項: action裡

七、Struts2檔案下載

  一、Struts2檔案上傳 Struts2的檔案上傳實現非常簡單,只需要簡單幾步就可完成; 注意: (1)檔案上傳的struts2標籤為:<s:file name="" label="上傳"/> (2)檔案上傳的前提是表單屬性method="post" e

struts2實現檔案下載

一、單檔案上傳 1、檔案上傳條件: (1)請求方法必須是post (2)enctype的屬性值必須為multipart/form-data (3)提供一個檔案選擇域 2、檔案上傳jsp程式碼 <%@ page language="java" c

struts2 檔案下載

檔案上傳: 三種上傳方案 虛擬路徑與真實路徑 /upload copyFile與copydirectory 檔案上傳的三種方案 1.將上傳的檔案以二進位制的形式存放到資料庫 oa系統 activiti工作流框架 2.將檔案上傳到檔案伺服器(硬碟足夠大)中 3.上傳到t

檔案下載簡單案例

檔案上傳       同時構建這個controller的過程中遇到最大的一個bug是: 得構建一個檢視資源管理器,因為controller中必須得認識ModelAndView,String型別 沒有ModelA

linux下安裝簡單檔案下載工具 lrzsz

編譯安裝 1、從下面的網站下載 lrzsz-1.12.20.tar.gz wget https://ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz 2、檢視裡面的I

SpringMVC配置,簡單例項,檔案下載,ajax請求

本文基於SpringMVC採用註解方式,從配置到簡單常用的功能舉例詳解,功能已經在本機測試過,能跑起來。 參考資料:iteye部落格;                   Spring文件; 1、匯入相關jar包:                              

使用jsp/servlet簡單實現檔案下載

public class UploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,

struts2檔案下載圖片顯示所遇到的問題

1、關於struts2的檔案上傳下載和spring mvc框架大同小異,只是一些配置檔案的區別,一個很突出的問題就是關於圖片上傳,使用myeclipse編寫一個圖片上傳與下載的功能都能實現,但是要顯示

Struts2實現單檔案,多檔案下載(十)

    “兩個蝴蝶飛”特別喜歡"java1234知識分享網"小峰的實用主義,所以本文及其系列文章均是採用實用主義,從專案和程式碼的角度去分析。由於本人經驗有限,嘴皮子不溜,所以學術性,概念性,底層性的知識點暫時不做介紹。文章中有錯誤之處,歡迎拍磚和指點。特別感謝"java12

Spring Boot——檔案下載

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apac

java web檔案下載

jsp程式碼(檔案上傳) <form id="upLoad" method="post">

struts的檔案下載

struts的檔案上傳與下載後臺程式碼 package interceptor; import java.io.File; import java.io.IOException;import org.apache.commons.io.FileUtils; import web.Base

java:檔案下載

一.檔案上傳 1.注意: jsp提交方式必須為post 必須採用複雜格式 : enctype=“multipart/form-data” <form action="/upload" method="post" enctype="multipart/form

Spring 中的檔案下載控制

先建立根應用上下文配置,WebDemo/src/main/java/com/seliote/webdemo/config/RootContextConfig.java package com.seliote.webdemo.config; import org.springframework.c

Struts2檔案下載(1)單檔案

在struts2中整合fileuoload功能,因為在匯入的jar包中包含了common-fileipload.jar檔案 在struts2中的interceptor 中有一個fileupload攔截器,他的主要功能就是完成檔案上傳。 注意事項 method=post

Struts 2 檔案下載

單個檔案上傳 表單設定enctype="multipart/form-data“ 表單設定method="POST“ <s:file name="f1" label="logo"/> 多檔案上傳: 把所有的屬性改為陣列即可。 private File []f1;

Spring Boot 整合之檔案下載

1.匯入依賴 <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId>