这是部分代码:  希望高手赐教    
String filepath = filemap.get("filepath").toString();
String filename = filemap.get("filename").toString();
// 开始下载
File file4 = null;
FileInputStream fis1 = null;
ServletOutputStream ouputStream = null;

try { 
  response.reset();
  ouputStream = response.getOutputStream();
      file4 = new File(filepath+filename); 
      fis1=new FileInputStream(file4);
  int len1 = (int)file4.length() ;
  
  //response.setContentType("application/zip");
  response.setContentType("application/octet-stream");   response.setHeader("Accept-Ranges", "bytes");
  response.setHeader("Content-disposition", "attachment;filename=" +
  URLEncoder.encode(filename,"utf-8"));
  
  //response.setContentLength(Integer.parseInt(file4.length() + ""));
  
  response.setHeader("Content-Length",file4.length() + "");   String range = request.getHeader("Range");
  if (range != null) {
  
     int middleNum = range.indexOf('-');

range = range.substring("bytes=".length(), middleNum);
//range = range.substring("bytes=".length(), range.length() - 1);
//String[] str = range.split("-");

/*long lon1 = Long.parseLong(str[0]);
long lon2 = Long.parseLong(str[1]);
long start1 = lon1 - lon2;*/
long start1 = Long.parseLong(range);
fis1.skip(start1);
long l = file4.length();
String contentRange = new StringBuffer("bytes ").append(start1)
.append("-").append(l - 1).append("/").append(l)
.toString();
response.setHeader("Content-Range", contentRange);
response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); }
  
  int len = 0; 
  int tmp = 100*1024;
  
  while (len < len1){ 
 byte[] input = new byte[tmp];
            
 if (len + tmp >len1){
             
 input = new byte[(len1 - len)];
      
  }
      if (fis1.read(input, 0, input.length) != -1){
      len = len + input.length;
       ouputStream.write(input); 
       ouputStream.flush(); 
    }
  }
}

解决方案 »

  1.   

    你没有贴错误出来另外,支持多线程下载时你还需要设置response的返回值为206
    response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
      

  2.   

    这是报的错误信息java.lang.NullPointerException
    at com.huateng.struts.action.TransitionAction.safeExecute(TransitionAction.java:59)
    at com.huateng.struts.action.SafeAction.execute(SafeAction.java:74)
    at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
    at net.sf.struts.saif.ActionInterceptorChainImpl.doIntercept(ActionInterceptorChainImpl.java:131)
    at com.huateng.struts.action.validator.FormValidator.doIntercept(FormValidator.java:84)
    at net.sf.struts.saif.ActionInterceptorChainImpl.doIntercept(ActionInterceptorChainImpl.java:127)
    at net.sf.struts.saif.RequestProcessorHelper.processInterceptors(RequestProcessorHelper.java:425)
    at net.sf.struts.saif.SAIFRequestProcessor.processActionPerform(SAIFRequestProcessor.java:83)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at as.huateng.struts.util.SignOnFilter.doFilter(SignOnFilter.java:66)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)2011-12-12 11:47:33 org.apache.catalina.core.StandardWrapperValve invoke
    严重: Servlet.service() for servlet action threw exception
    java.lang.IllegalStateException: Cannot forward after response has been committed
    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:312)
    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
    at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
    at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at as.huateng.struts.util.SignOnFilter.doFilter(SignOnFilter.java:66)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Unknown Source) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
    at java.lang.Thread.run(Unknown Source)
      

  3.   

    清楚写了错误, com.huateng.struts.action.TransitionAction.safeExecute(TransitionAction.java:59)不知道你哪一行是59,自己Debug就知道为什么是null了
      

  4.   

    java.lang.IllegalStateException: Cannot forward after response has been committed不要用jsp做这类功能,用servlet吧。这个错误是说,你想forward,可是前面已经有输出内容了。