如题,补充说明:解压后内容都在,压缩包的文件一个不少。但就是会提示“!   D:\temp\20090420065144.zip: 压缩文件损坏”JSP下载部门代码如下:StringBuffer sb = new StringBuffer(2048);
sb.append("attachment;filename=");
sb.append(tempname);
java.io.BufferedOutputStream bos = null;
try {
response.setContentType("application/x-gzip;charset=UTF-8");
//response.setContentType("application/x-download");
response.setHeader("Content-Disposition", new String(sb
.toString().getBytes(), "ISO8859-1"));
//response.setHeader("Content-Disposition",  "attachment; filename=" + tempname); String tmp = rarDir + tempname;
java.io.FileInputStream fis = new java.io.FileInputStream(tmp);
bos = new java.io.BufferedOutputStream(response
.getOutputStream());
byte[] buffer = new byte[2048];
while (fis.read(buffer) != -1) {
bos.write(buffer);
}
bos.write(buffer, 0, buffer.length); fis.close();
bos.close(); } catch (Exception e) {
out.println(e.toString());
e.printStackTrace();
}紧急啊,明天要用,今晚必须解决!!!!

解决方案 »

  1.   

    兄弟 用application/x-zip-compressed
      

  2.   


    response.setHeader("Pragma","No-cache");
    String fileName = new String(data.getName().getBytes(),"ISO_8859_1");
    response.setHeader("Content-disposition","attachment;filename="+fileName+FileUtils.getFilexExit(data.getPath()));
            response.setDateHeader("Expires", 0);
    response.setContentType(data.getContentType()+";charset=GBK");//data.getContentType()
      

  3.   

     String s = Global.getRealPath() + att.getVisualPath() + "/" + att.getDiskName();
      java.io.File f = new java.io.File(s);
      java.io.FileInputStream fis = new java.io.FileInputStream(f);
      

  4.   


    我用的下载页面代码,提取下用用看.DbConnection是一个连接池而已<%@page contentType="text/html;charset=utf-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@page language="java"%>
    <%@page import="java.util.*"%>
    <%@page import="java.net.*"%>
    <%@page import="java.io.*"%>
    <%@page session="false"%>
    <%@page import="java.sql.*"%>
          
          
     <jsp:useBean id="DBConnection" scope="page"
    class="com.hangzhoubank.client.PageBreak" />     
          <% 
    //关于文件下载时采用文件流输出的方式处理: 
    //加上response.reset(),并且所有的%>后面不要换行,包括最后一个; 
              String filedownload = "";
              String filedisplay = ""; 
              String realPath=request.getRealPath("/");
      String bookid=request.getParameter("bookid");
        if(!bookid.matches("^\\d{1,6}$")){
    bookid = "1";
     }
     String bookSql = "select * from cdt_book  where id="+bookid;
     ResultSet bookRs = DBConnection.executeQuery(bookSql); 
     while(bookRs.next()){
     filedownload=realPath+bookRs.getString("fileurl");
     filedisplay=bookRs.getString("fileurl");
     }
            //response.reset();//可以加也可以不加 
            response.setContentType("application/x-download"); 
            filedisplay = URLEncoder.encode(filedisplay,"UTF-8"); 
            response.addHeader("Content-Disposition","attachment;filename=" + filedisplay); 
            OutputStream outp = null; 
            FileInputStream in = null; 
               try 
                   { 
                    outp = response.getOutputStream(); 
                     in = new FileInputStream(filedownload); 
                     byte[] b = new byte[1024]; 
                     int j= 0; 
                     while((j = in.read(b)) > 0) 
                             { 
                         outp.write(b, 0, j); 
                             } 
                           
                       outp.flush(); 
                       out.clear(); 
                       out = pageContext.pushBody(); 
                      } 
                   catch(Exception e) 
               { 
                 // e.printStackTrace(); 
               } 
            finally 
         { 
                  if(in != null) 
                  { 
                      in.close(); 
                      in = null; 
                    } 
                 if(outp != null) 
                        { 
                      outp.close(); 
                      outp = null; 
                            } 
         } 
    %>
      

  5.   

    倒!!!
    bos.write(buffer, 0, buffer.length);
    多了这一句导致的。晕死!多谢各位!!