java中struts2實(shí)現(xiàn)文件上傳下載功能
先談一談struts2實(shí)現(xiàn)文件的上傳和下載實(shí)例實(shí)現(xiàn)的原理:
Struts 2是通過Commons FileUpload文件上傳。
Commons FileUpload通過將HTTP的數(shù)據(jù)保存到臨時(shí)文件夾,然后Struts使用fileUpload攔截器將文件綁定到Action的實(shí)例中。從而我們就能夠以本地文件方式的操作瀏覽器上傳的文件。
具體實(shí)現(xiàn):
一、創(chuàng)建index.jsp頁(yè)面
<body> <s:form action="upload" method="post" theme="simple" enctype="multipart/form-data"> <table align="center" width="50%" border="1"> <tr> <td>選擇上傳文件</td> <td id="more"> <s:file name="file"></s:file> <input type="button" value="Add More.." onclick="addMore()"> </td> </tr> <tr> <td><s:submit type="button" value="submit" onclick="return checkf()"/></td> <td><s:reset value="reset "></s:reset></td> </tr> </table> <table align="center" width="50%" border="1"> <tr> <td>測(cè)試.txt</td> <td> <a href="<s:url value='download.action'><s:param name='fileName'>測(cè)試.txt</s:param> </s:url>">下載</a> </td> </tr> </table> </s:form> </body>
創(chuàng)建result.jsp頁(yè)面
<body> <s:form> <div style="border:1px solid black">成功上傳的文件:<br> <ul style="list-style-type:decimal"> <s:iterator value="#request.fileName" id="file" status="status"> <li><s:property/> </li> </s:iterator> </ul> </div> </s:form> </body>
當(dāng)然別忘了在每個(gè)頁(yè)面上都添加上struts2 標(biāo)簽引用<%@taglib prefix="s" uri="/struts-tags" %>
二、創(chuàng)建updown.js文件,在index.jsp中引用
function checkf(){ var files = document.getElementsByName("file"); if(files[0].value.length!=0){ return true; }else{ alert("請(qǐng)選擇文件"); return false; } } function addMore() { var td = document.getElementById("more"); var br = document.createElement("br"); var input = document.createElement("input"); var button = document.createElement("input"); input.type = "file"; input.name = "file"; button.type = "button"; button.value = "Remove"; button.onclick = function() { td.removeChild(br); td.removeChild(input); td.removeChild(button); } td.appendChild(br); td.appendChild(input); td.appendChild(button); }
三、創(chuàng)建upDownloadAction.java
package com.action; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.List; import javax.servlet.http.HttpServletRequest; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.ServletActionContext; public class UpDownloadAction extends ActionSupport { private static final long serialVersionUID = 1L; private List<File> file;// 對(duì)應(yīng)jsp中file標(biāo)簽 private List<String> fileFileName;// private List<String> fileContentType;// private String fileName;//獲得jsp中pram參數(shù) @SuppressWarnings("deprecation") // 文件上傳 public String uploadFiile() throws Exception { String root = ServletActionContext.getServletContext().getRealPath( "/upload");// 上傳路徑 System.out.println(root); InputStream inputStream; File destFile; OutputStream os; for (int i = 0; i < file.size(); i++) { inputStream = new FileInputStream(file.get(i)); destFile = new File(root, this.getFileFileName().get(i)); os = new FileOutputStream(destFile); byte[] buffer = new byte[400]; int length = 0; while ((length = inputStream.read(buffer)) > 0) { os.write(buffer, 0, length); } inputStream.close(); os.close(); } HttpServletRequest request = ServletActionContext.getRequest(); request.setAttribute("fileName", fileFileName); return SUCCESS; } // 文件下載 public InputStream getDownloadFile() throws FileNotFoundException, UnsupportedEncodingException { System.out.println(getFileName()); // 如果下載文件名為中文,進(jìn)行字符編碼轉(zhuǎn)換 ServletActionContext.getResponse().setHeader("Content-Disposition","attachment;fileName=" + java.net.URLEncoder.encode(fileName, "UTF-8")); InputStream inputStream = new FileInputStream("F:/" //使用絕對(duì)路徑 ,從該路徑下載“測(cè)試.txt"文件 + this.getFileName()); System.out.println(inputStream); return inputStream; } // 下載 public String downloadFile() throws Exception { return SUCCESS; } public String getFileName() throws UnsupportedEncodingException { return fileName; } public void setFileName(String fileName) throws UnsupportedEncodingException { this.fileName = new String(fileName.getBytes("ISO8859-1"), "utf-8"); } }
注:屬性的 get和set方法已省略。
四、最后是配置文件
1、web.xml配置
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2、struts.xml配置
<struts> <constant name="struts.i18n.encoding" value="utf-8"></constant> <constant name="struts.multipart.saveDir" value="f:\"></constant> <package name="struts2" extends="struts-default"> <action name="upload" class="com.action.UpDownloadAction" method="uploadFiile"> <result name="success">/jsp/result.jsp</result> <interceptor-ref name="fileUpload"> <!--maximumSize (可選) - 這個(gè)攔截器允許的上傳到action中的文件最大長(zhǎng)度(以byte為單位). 注意這個(gè)參數(shù)和在webwork.properties中定義的屬性沒有關(guān)系,默認(rèn)2MB--> <param name="maximumSize">409600</param> <!--allowedTypes (可選) - 以逗號(hào)分割的contentType類型列表(例如text/html), 這些列表是這個(gè)攔截器允許的可以傳到action中的contentType.如果沒有指定就是允許任何上傳類型.--> <param name="allowedTypes"> text/plain </param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action> <action name="download" class="com.action.UpDownloadAction" method="downloadFile" > <result name="success" type="stream"> <!--指定文件下載類型 application/octet-stream默認(rèn)值可以下載所有類型 --> <param name="contentType"> application/txt; </param> <!-- 指定下載的文件名和顯示方式 ,但注意中文名的亂碼問題,解決辦法是:進(jìn)行編碼處理--> <!--contentDisposition是文件下載的處理方式,包括內(nèi)聯(lián)(inline)和附件(attachment), 默認(rèn)是inline, 使用附件時(shí)這樣配置:attachment;filename="文件名" 。--> <param name="contentDisposition"> attachment;filename="${fileName}" </param> <!--由getDownloadFile()方法獲得inputStream--> <param name="inputName">downloadFile</param> <!-- 指定下載文件的緩存大小--> <param name="bufferSize">2048</param> </result> </action> </package> </struts>
一個(gè)簡(jiǎn)單的Struts2多文件上傳和單文件下載就實(shí)現(xiàn)了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
- struts2實(shí)現(xiàn)簡(jiǎn)單文件下載功能
- JSP開發(fā)之Struts2實(shí)現(xiàn)下載功能的實(shí)例
- struts2實(shí)現(xiàn)文件下載功能
- java中Struts2 的文件上傳和下載示例
- Struts2實(shí)現(xiàn)文件下載功能代碼分享(文件名中文轉(zhuǎn)碼)
- java中struts2實(shí)現(xiàn)簡(jiǎn)單的文件上傳與下載
- JavaWeb中struts2實(shí)現(xiàn)文件上傳下載功能實(shí)例解析
- JavaEE中struts2實(shí)現(xiàn)文件上傳下載功能實(shí)例解析
- java中struts2實(shí)現(xiàn)文件上傳下載功能實(shí)例解析
- struts2實(shí)現(xiàn)文件下載功能
相關(guān)文章
java中線程池最實(shí)用的創(chuàng)建與關(guān)閉指南
試中經(jīng)常會(huì)問到,創(chuàng)建一個(gè)線程池需要哪些參數(shù)啊,線程池的工作原理啊,卻很少會(huì)問到線程池如何安全關(guān)閉的,下面這篇文章主要給大家介紹了關(guān)于java中線程池最實(shí)用的創(chuàng)建與關(guān)閉的相關(guān)資料,需要的朋友可以參考下2021-09-09springMVC 用戶登錄權(quán)限驗(yàn)證實(shí)現(xiàn)過程解析
這篇文章主要介紹了springMVC 用戶登錄權(quán)限驗(yàn)證實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Java編程使用Runtime和Process類運(yùn)行外部程序的方法
這篇文章主要介紹了Java編程使用Runtime和Process類運(yùn)行外部程序的方法,結(jié)合實(shí)例形式分析了java使用Runtime.getRuntime().exec()方法運(yùn)行外部程序的常見情況與操作技巧,需要的朋友可以參考下2017-08-08Java實(shí)現(xiàn)將PPT轉(zhuǎn)為OFD過程詳解
本文將通過Java后端程序代碼展示如何實(shí)現(xiàn)將PPT幻燈片轉(zhuǎn)成OFD格式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定的幫助,需要的可以參考一下2022-01-01解決redisTemplate向redis中插入String類型數(shù)據(jù)時(shí)出現(xiàn)亂碼問題
這篇文章主要介紹了解決redisTemplate向redis中插入String類型數(shù)據(jù)時(shí)出現(xiàn)亂碼問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12如何用注解的方式實(shí)現(xiàn)Mybatis插入數(shù)據(jù)時(shí)返回自增的主鍵Id
這篇文章主要介紹了如何用注解的方式實(shí)現(xiàn)Mybatis插入數(shù)據(jù)時(shí)返回自增的主鍵Id,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07