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>