Struts 2實作檔案的上傳下載下傳
上傳:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX9kkaNNTU65UMFpXTzEESlZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zN1kzM0gDMxETOxETM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
下載下傳:
環境
MyEclipse 2014
Tomcat:apache-tomcat-8.0.46
JDK:1.7
Sturts版本:2.1
![]()
Struts 2實作檔案的上傳下載下傳(解除檔案大小限制) Struts 2實作檔案的上傳下載下傳 環境上傳檔案下載下傳檔案
上傳檔案
1.上傳檔案界面
index.jsp
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>檔案上傳</title>
</head>
<body>
<s:form action="myupload" method="post" enctype="multipart/form-data">
<s:file name="upload" label="上傳的檔案"></s:file>
<s:submit value="上傳"></s:submit>
</s:form>
</body>
</html>
顯示界面
success.jsp
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<title>成功頁面</title>
</head>
<body>
恭喜你!上傳成功!你上傳的圖檔如下:<br/>
<a href="uploadfile/<s:property value="uploadFileName"/>"><img src=uploadfile/<s:property value="uploadFileName"/>></a>
</body>
</html>
2.檔案上傳功能
UploadAction.java
package org.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport{
private File upload; //上傳檔案
//屬性upload的get/set方法
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
private String uploadFileName; //上傳的檔案名
//屬性uploadFileName的get/set方法
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String execute() throws Exception {
InputStream is=new FileInputStream(getUpload()); //根據上傳的檔案得到輸入流
String directory = "/uploadfile";
String targetDirectory = ServletActionContext.getServletContext().getRealPath(directory);
OutputStream os=new FileOutputStream(targetDirectory + "/" +uploadFileName); //指定輸出流位址
byte buffer[]=new byte[];
int count=;
while((count=is.read(buffer))>){
os.write(buffer,,count); //把檔案寫到指定位置的檔案中
}
os.close(); //關閉
is.close();
return SUCCESS; //傳回
}
}
3.在
struts.xml
中配置action
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="myupload" class="org.action.UploadAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
這時候通路http://localhost:8080/Ex5.3/index.jsp已經可以上傳比較小的檔案(<2M),但是一旦上傳較大的檔案就會報錯
要修改檔案大小限制,可以在Struts 2的配置檔案
struts.properties
中修改
struts.multipart.maxSize
常量值,但是我們去找這個檔案還是比較麻煩的,是以選擇在
struts.xml
檔案中加入下面這一行代碼。
<constant name="struts.multipart.maxSize" value="1073741824" />
後面的數字可以根據自己的需要修改
下載下傳檔案
1.把檔案複制到開發目錄
2.下載下傳界面
download.jsp
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<title>檔案下載下傳</title>
</head>
<body>
<a href="downloadAction.action">下載下傳連結</a>
</body>
</html>
3.
DownloadAction.java
package org.action;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DownloadAction extends ActionSupport{
private String downloadFile; //需要下載下傳的檔案路徑
public String getDownloadFile() {
return downloadFile;
}
public void setDownloadFile(String downloadFile) {
this.downloadFile = downloadFile;
}
public InputStream getTargetFile(){ //根據上面給出的檔案路徑,生成它的輸入流
return ServletActionContext.getServletContext().getResourceAsStream(downloadFile);
}
public String execute() throws Exception{
return SUCCESS;
}
}
4.在
struts.xml
配置action
<action name="downloadAction" class="org.action.DownloadAction">
<!-- 傳遞參數,指定要下載下傳的檔案的路徑 -->
<param name="downloadFile">/downloadfile/實驗5.docx</param>
<result name="success" type="stream">
<!-- 輸入流名稱,對應Action類中的getTargetFile()方法 -->
<param name="inputName">targetFile</param>
<!-- 設定下載下傳檔案的檔案名 -->
<param name="contentDisposition">filename="example.docx"</param>
<!-- 指定下載下傳檔案時緩沖區的大小 -->
<param name="bufferSize">4096</param>
</result>
</action>
通路http://localhost:8080/Ex5.3/download.jsp就可以點選連結下載下傳檔案了