2015-08-30 16 views
-1

我已經寫了下載文件的jsp代碼。這裏是我的代碼下載的文件使用jsp文件名而不是實際文件名保存

Downloadfile.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
    <%@ page import="java.io.*" %> 
    <%@ page import="javax.servlet.*" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>File Download</title> 
</head> 
<body> 
<% 
int bufSize=2048; 
String filePath; 

//filePath=getServletContext().getRealPath("")+File.separator+"a.txt"; 
filePath="D:"+File.separator+"Rain over me.mp3"; 
File file=new File(filePath); 

int length=0; 
ServletOutputStream outStream=response.getOutputStream(); 
response.setContentType("APPLICATION/OCTET-STREAM"); 
response.setContentLength((int)file.length()); 
String fileName=file.getName(); 
System.out.println(fileName); 
response.setHeader("Content-Diposition", "attachment; filename=\""+fileName+"\""); 
byte[] byteBuffer=new byte[bufSize]; 
DataInputStream inStream=new DataInputStream(new FileInputStream(file)); 
System.out.println("df"); 
while((inStream!=null)&&((length=inStream.read(byteBuffer))!=-1)) 
{ 
    outStream.write(byteBuffer, 0, length); 
} 

inStream.close(); 
outStream.close(); 
System.out.println("df1"); 
%> 
</body> 
</html> 

sample.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>File Download</title> 
</head> 
<body> 
Click on the link to download the file<a href="DownloadFile.jsp">Click Here</a> 
</body> 
</html> 

後,我運行的代碼,該文件得到下載文件名爲Downloadfile.jsp而不是Rain over me.mp3而且我在CONSOL中得到這個下面的錯誤È

2015年8月30日下午2點25分23秒org.apache.catalina.core.StandardWrapperValve調用 重度:Servlet.service()進行的servlet [JSP]與路徑上下文[/ FileDownload]拋出異常[java的.lang.IllegalStateException:getOutputStream()已被調用此響應],其根本原因爲 java.lang.IllegalStateException:getOutputStream()已被調用此響應 at org.apache.catalina.connector.Response.getWriter Response.java:636) 在org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:214) 在org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125) 的組織。 apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java :118) 在org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:190) 在org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:123) 在org.apache.jasper .runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:80) at org.apache.jsp.DownloadFile_jsp._jspService(DownloadFile_jsp.java:113) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70 ) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) at org.apache.jasper.servlet.JspServlet .serviceJspFile(JspServlet.java:390) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain。的doFilter(ApplicationFilterChain.java:210) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve。調用(ErrorReportValve.java:98) at org.apache.catal ina.valves.AccessLogValve.invoke(AccessLogValve.java:927) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter。 java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:579) at org.apache。 tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor。runWorker(來源不明) 在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(來源不明) 在java.lang.Thread.run(來源不明)

有人能幫助我解決這個問題。

回答

0
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>File Download</title> 
</head> 
<body> 
<form action="Downloadfile.jsp" method="post"> 
    Click on the link to download the file<a href="Rain over me.mp3">ClickHere</a> 
</form> 
</body> 
</html> 
+0

@Harry你的請求是要求文件DownloadFile.jsp – QuakeCore

+0

但在點擊鏈接ClickHere它會嘗試導航到雨水不會me.mp3代替DownloadFile.jsp吧? – Harry

+0

@Harry不,只是在你鏈接href把一個有效的URI放到你要下載的文件中,它會被下載,你不會看到文件瀏覽器對話框,你沒試試嗎?! – QuakeCore

相關問題