一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java中struts2實現文件上傳下載功能

java中struts2實現文件上傳下載功能

2020-04-27 12:06GYW JAVA教程

這篇文章主要介紹了java中struts2實現文件上傳下載功能的方法,以實例形式分析了struts2文件上傳下載功能的實現技巧與相關問題,具有一定的參考借鑒價值,需要的朋友可以參考下

先談一談struts2實現文件的上傳和下載實例實現的原理

Struts 2是通過Commons FileUpload文件上傳。

Commons FileUpload通過將HTTP的數據保存到臨時文件夾,然后Struts使用fileUpload攔截器將文件綁定到Action的實例中。從而我們就能夠以本地文件方式的操作瀏覽器上傳的文件。

具體實現

一、創建index.jsp頁面

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<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>測試.txt</td>
<td>
  <a href="<s:url value='download.action'><s:param name='fileName'>測試.txt</s:param> </s:url>">下載</a>
</td>
</tr>
</table>
</s:form>
</body>

創建result.jsp頁面

?
1
2
3
4
5
6
7
8
9
10
11
<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>

當然別忘了在每個頁面上都添加上struts2 標簽引用<%@taglib prefix="s" uri="/struts-tags" %>

二、創建updown.js文件,在index.jsp中引用

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function checkf(){
 var files = document.getElementsByName("file");
 if(files[0].value.length!=0){
   return true;
  }else{
  alert("請選擇文件");
  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);
}

三、創建upDownloadAction.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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;// 對應jsp中file標簽
 private List<String> fileFileName;//
 private List<String> fileContentType;//
 private String fileName;//獲得jsp中pram參數
 @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());
 
  // 如果下載文件名為中文,進行字符編碼轉換
  ServletActionContext.getResponse().setHeader("Content-Disposition","attachment;fileName="
      + java.net.URLEncoder.encode(fileName, "UTF-8"));
  InputStream inputStream = new FileInputStream("F:/" //使用絕對路徑 ,從該路徑下載“測試.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配置

?
1
2
3
4
5
6
7
8
9
<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配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<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 (可選) - 這個攔截器允許的上傳到action中的文件最大長度(以byte為單位).
 注意這個參數和在webwork.properties中定義的屬性沒有關系,默認2MB-->
    <param name="maximumSize">409600</param>
<!--allowedTypes (可選) - 以逗號分割的contentType類型列表(例如text/html),
這些列表是這個攔截器允許的可以傳到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默認值可以下載所有類型 -->
    <param name="contentType">
     application/txt;
    </param>
   <!-- 指定下載的文件名和顯示方式 ,但注意中文名的亂碼問題,解決辦法是:進行編碼處理-->
   <!--contentDisposition是文件下載的處理方式,包括內聯(inline)和附件(attachment),
   默認是inline, 使用附件時這樣配置: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>

一個簡單的Struts2多文件上傳單文件下載就實現了。

以上就是本文的全部內容,希望對大家的學習有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 俺去俺去啦最新官网在线 | 三级黄片毛片 | 青草碰人人澡人人澡 | 亚洲欧美久久久久久久久久爽网站 | 91tm视频| 国产欧美日韩精品一区二区三区 | xxx95日本老师xxx学生 | 俄罗斯三级完整版在线观看 | 国产剧情一区 | 美女扒开腿让男生桶爽漫画 | 日本高清免费中文字幕不卡 | 欧美人禽杂交在线视频 | 咪咪爱991| 青青青青青国产费线在线观看 | 王晶经典三级 | 久久AV国产麻豆HD真实 | 美女班主任下面好爽好湿好紧 | 无码日韩精品一区二区免费 | 香蕉久久久久 | 精品国产国产综合精品 | 国产乱人乱精一区二区视频密 | 欧美日韩国产一区二区三区伦 | 变态 调教 视频 国产九色 | 国产亚洲一区二区三区 | 欧美亚洲欧美 | 青青草成人在线 | 大桥未久aⅴ一区二区 | videos欧美肥婆 | 午夜性爽视频男人的天堂在线 | 网站在线播放 | 欧美在线视频 一区二区 | 麻豆找网服 | 朝鲜美女免费一级毛片 | 草草视频人人爽 | 欧美日韩一二三区免费视频观看 | 久久视频在线视频观看天天看视频 | 国产精品亚洲片在线va | 九九成人免费视频 | 99在线视频精品 | 欧美疯狂做爰3xxx | 72张让男人一看就硬的图片 |