struts 2 파일 다운로드 전체 버 전
12141 단어 46_struts2
Struts 2 。
struts2hello, MyEclipse 6, IDE ,
, 。 :
[url]http://beansoft.java-cn.org/myeclipse_doc_cn/struts2_demo.pdf[/url],
Struts 2 。
, struts.xml :
text/plain
inputStream
attachment;filename="struts2 .txt"
4096
Struts .txt
text/plain
inputStream
attachment;filename="${downloadFileName}"
4096
/download/ .doc
.doc
application/octet-stream;charset=ISO8859-1
inputStream
attachment;filename="${downloadFileName}"
4096
Struts 2 , HTTP , 。
, , , :다운로드 하 다.
file1.zip, , 。 , ,
, 。 , URL
%3457...。 :[url]http://localhost:8080/struts2hello/download/[/url] .doc,
Tomcat 404 :HTTP Status 404 - /struts2hello/download/?μí3?μ?÷.doc。
Struts 2 , JSP ,
。 , , EXCEL,PDF, 。
, , 。
, Action , InputStream ,
, , , 。
, InputStream 。 :public InputStream getInputStream()
throws Exception, , getDownloadFile()。 , Action
example.FileDownloadAction :
package example;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import com.opensymphony.xwork2.Action;
public class FileDownloadAction implements Action {
public InputStream getInputStream() throws Exception {
return new ByteArrayInputStream("Struts 2 ".getBytes());
}
public String execute() throws Exception {
return SUCCESS;
}
}
。 getInputStream(),
。 :
return new java.io.FileInputStream(“c:\\test.txt”);//
。
, struts.xml action , :
text/plain
inputStream
attachment;filename="struts2.txt"
4096
action result (stream), stream , ,
location , inputName , , Action ,
InputStream。 :
:
contentType:
, MIME , text/plain ,text/xml XML,image/gif GIF ,image/jpeg JPG 。
inputName:
, action Inputstream , inputStream getInputStream() 。
contentDisposition:
, (inline) (attachment) , ,
。 :attachment;filename="struts2.txt", struts2.txt。 filename
="struts2.txt", inline, , :inline; filename="struts2.txt" 。
bufferSize:
。 ,contentType contentDisposition HTTP Content-Type Content-disposition 。
, , :[url]http://localhost:8080/struts2hello/download.action[/url],
。
HTTP , :
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-disposition: attachment;filename="struts2.txt"
Content-Type: text/plain
Transfer-Encoding: chunked
Date: Sun, 02 Mar 2008 02:58:25 GMT
action , :contentType contentDisposition。 contentType ,
, , .bean , action , ,
:application/octet-stream;charset=ISO8859-1 , charset,
; application/x-download, , , 。
contentDisposition, filename="struts2.txt", inline; filename="struts2.txt",
:Struts 2 , 。 ,
attachment;filename="struts2.txt", attachment; 。
, , 。 , 。 , ,
。 filename filename=”struts2 .txt” , , ,
contentDisposition :
attachment;filename="struts2 .txt"
, , 12.13 。 , !IE , download_action
。Firefox , , , struts2--txt struts2 .txt。 ?
, ISO8859-1 , 12.8 JSP ( Weblogic )
, , Servlet 。 Java , :
String downFileName = new String(“struts2 .txt”.getBytes(), "ISO8859-1");
XML , struts2??.txt, XML 。 ,
, Action , , get 。 , 12.3.8 Action (param)
, action , , param :${ }, action
。 , FileDownloadAction2 :
package example;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import com.opensymphony.xwork2.Action;
public class FileDownloadAction2 implements Action {
private String fileName;// param
public InputStream getInputStream() throws Exception {
return new ByteArrayInputStream("Struts 2 ".getBytes());
}
public String execute() throws Exception {
return SUCCESS;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
/** */
public String getDownloadFileName() {
String downFileName = fileName;
try {
downFileName = new String(downFileName.getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return downFileName;
}
}
, fileName, ; getDownloadFileName()
downloadFileName, fileName , ISO8859 。
action , , action, download2, :
Struts .txt
text/plain
inputStream
attachment;filename="${downloadFileName}"
4096
。 ${downloadFileName}, action ${} ,
+action. getDownloadFileName()。
, , :
[url]http://localhost:8080/struts2hello/download2.action[/url] , 。
, Web 。
, WebRoot/download, , .doc , action 。
, , word , word
。 Action , example. FileDownloadAction3, :
package example;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
public class FileDownloadAction3 implements Action {
private String fileName;// param
private String inputPath;//
public InputStream getInputStream() throws Exception {
// ServletContext, application
return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
}
public String execute() throws Exception {
return SUCCESS;
}
public void setInputPath(String value) {
inputPath = value;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
/** */
public String getDownloadFileName() {
String downFileName = fileName;
try {
downFileName = new String(downFileName.getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return downFileName;
}
}
。 inputPath , 。 ServletActionContext
.getServletContext() , 12.6 , Servlet ServletContext, jsp
application , 。
action, download2 , 。 struts.xml action :
/download/ .doc
.doc
application/octet-stream;charset=ISO8859-1
inputStream
attachment;filename="${downloadFileName}"
4096
。 , ,inputPath, contentType 。 , :
[url]http://localhost:8080/struts2hello/download3.action[/url] 。 , , .doc word , 。
: , Struts 2 , :
[url]http://localhost:8080/struts2hello/download3.action?inputPath=/WEB-INF/web.xml[/url], web.xml
, JSP 。 。 , ,
Action inputPath , :
public void setInputPath(String value) {
inputPath = value;
}
download3.action?fileid=1 。 , execute() , download
, , 。 , execute() , :
public String execute() throws Exception {
//
String downloadDir = ServletActionContext.getServletContext().getRealPath("/download");
//
String downloadFile = ServletActionContext.getServletContext().getRealPath(inputPath);
java.io.File file = new java.io.File(downloadFile);
downloadFile = file.getCanonicalPath();// , ..
// /download ,
if(!downloadFile.startsWith(downloadDir)) {
return null;
}
return SUCCESS;
}
web.xml , , /download 。