如题,补充说明:解压后内容都在,压缩包的文件一个不少。但就是会提示“! 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();
}紧急啊,明天要用,今晚必须解决!!!!
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();
}紧急啊,明天要用,今晚必须解决!!!!
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()
java.io.File f = new java.io.File(s);
java.io.FileInputStream fis = new java.io.FileInputStream(f);
我用的下载页面代码,提取下用用看.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;
}
}
%>
bos.write(buffer, 0, buffer.length);
多了这一句导致的。晕死!多谢各位!!