数据流下载问题急啊急 在线等 解决问题开贴++++分
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.PageContext;
import javax.servlet.ServletException;
import javax.servlet.ServletContext;
import java.io.FileInputStream;
import java.io.File;
//import com.sys.exception.MyException;
public class WebDownload {
private HttpServletRequest m_request;
private HttpServletResponse m_response;
private ServletContext m_application;
// protected HttpServletResponse m_response;
public WebDownload() {
}
public final void initialize(PageContext pagecontext)
throws ServletException
{
m_application = pagecontext.getServletContext();
m_request = (HttpServletRequest)pagecontext.getRequest();
m_response = (HttpServletResponse)pagecontext.getResponse();
}
public void downloadStringToFile(String str, String contentType, String fileName)
throws Exception
{
if(str == null)
throw new IllegalArgumentException("下载数据流不能为空.");
if(contentType == null)
m_response.setContentType("application/x-msdownload");
else
if(contentType.length() == 0)
m_response.setContentType("application/x-msdownload");
else
m_response.setContentType(contentType);
if(fileName == null)
m_response.setHeader("Content-Disposition", "attachment;");
else
if(fileName.length() == 0)
m_response.setHeader("Content-Disposition", "attachment;");
else
m_response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
byte abyte0[] = str.getBytes();
m_response.setContentLength(abyte0.length);
m_response.getOutputStream().write(abyte0, 0, abyte0.length);
}
private String getFileName(String s)
{
int i = 0;
i = s.lastIndexOf('/');
if(i != -1)
return s.substring(i + 1, s.length());
i = s.lastIndexOf('\\');
if(i != -1)
return s.substring(i + 1, s.length());
else
return s;
}
}
错误提示:java.net.ProtocolException: Exceeded stated content-length of: '1206' bytes
at weblogic.servlet.internal.ServletOutputStreamImpl.checkCL(ServletOutputStreamImpl.java:220)
at weblogic.servlet.internal.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:170)
at com.web.Functions.WebDownload.downloadStringToFile(WebDownload.java:69)
at jsp_servlet._jsp.__wsrz_download._jspService(__wsrz_download.java:170)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1058)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:401)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:306)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:5445)
at weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManager.java:780)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3105)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2588)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:213)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:189)
文件好象大于1024BYTE就报这个错误,小于的话 就500错误 急啊
JSP是这样写的
if(status)
{
//createxml.setFileSavePath(NSRXXPATH);
createxml.setQYSBBH(QYSBBH);
createxml.setMXXX(resultArray);
try
{
fileName = createxml.getFileName();
System.out.println(fileName);
streamContent = createxml.getXMLContent();
System.out.println(streamContent);
}catch(Exception e)
{
outputString = e.toString();
status = false;
}
}
if(status)
{
download.initialize(pageContext);
download.downloadStringToFile(streamContent, "application/x-msdownload", fileName);
}
else
{
out.println(outputString);
}
%>
问题点数:0、回复次数:8Top
1 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-04 18:29:45 得分 0
不能大于1024
你只能在
byte abyte0[] = str.getBytes();
if(abyte0.length>1024)
...
分成多个数组传递Top
2 楼ysbcg(Hummer)回复于 2005-04-04 18:30:31 得分 0
你发出的文件的大小比你在http头中的content-length长了,检查一下你的文件长度对不对。Top
3 楼zhutouzip(醒了的鸟)回复于 2005-04-04 18:34:26 得分 0
用response.setContentLength(length)设置一下你的响应头看看!Top
4 楼badapple(坏小毛毛虫)回复于 2005-04-04 19:28:01 得分 0
TO zhutouzip 我上面应该设置了response.setContentLength(length)的啊Top
5 楼badapple(坏小毛毛虫)回复于 2005-04-04 19:29:51 得分 0
TO ysbcg 怎么检查文件长度对不对啊?我是新手 请多多指教啊Top
6 楼badapple(坏小毛毛虫)回复于 2005-04-04 22:47:47 得分 0
顶上去 我现在把response.setContentLength(length)去掉了就可以了 但是生成的XML文件前面会多出一写空行 这是怎么回事?Top
7 楼OnlyFor_love(『勾勾手指头 一辈子不分手』)回复于 2005-04-05 09:04:01 得分 0
顶一下!Top
8 楼hongyan2004(spring+hibernate)回复于 2005-04-05 19:33:44 得分 0
UPTop




