我也遇到过这种问题,转换一下编码就没事了.下面是我的源代码:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,java.io.*"%>
<%@ include file="../inc/myfun.jsp"%>
<%
String filePath=myfun.getGBStr("cclj",request);//取得文件的相对存储路径
String realPath=(config.getServletContext()).getRealPath(filePath);//取得文件的绝对存储路径
File file=new File(realPath);//根据绝对路径创建文件对象
if(!file.exists()){ //判断文件是否存在
%>
<script language="javascript">
<!--
alert("对不起,您要下载的文件不存在!");
self.close();
//-->
</script>
<%
return;
}
int len=(new Long(file.length())).intValue(); String fileName=new String((file.getName()).getBytes(),"iso-8859-1"); //转换编码,取得文件名,这样就不会出现乱码了 response.reset();
response.setContentType("application/octet-stream;charset=gbk"); //设置输出响应流的消息头
response.setHeader("Content-disposition","attachment;filename=\""+fileName+"\"");
BufferedInputStream infile=new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream outfile=new BufferedOutputStream(response.getOutputStream());
int buffersize=1024;
try{
int total=0;
int once=0;
byte[] buffer=new byte[buffersize];
do{
once=infile.read(buffer); //读取文件到字节缓冲区
total=total+once;
if(once>=0)
outfile.write(buffer,0,buffersize); //将文件写入输出响应流
}while(total<len&&once>=0);
response.flushBuffer();
}
catch(Exception e){
}finally{
if(infile!=null) infile.close();
if(outfile!=null) outfile.close();
}
%>
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*,java.io.*"%>
<%@ include file="../inc/myfun.jsp"%>
<%
String filePath=myfun.getGBStr("cclj",request);//取得文件的相对存储路径
String realPath=(config.getServletContext()).getRealPath(filePath);//取得文件的绝对存储路径
File file=new File(realPath);//根据绝对路径创建文件对象
if(!file.exists()){ //判断文件是否存在
%>
<script language="javascript">
<!--
alert("对不起,您要下载的文件不存在!");
self.close();
//-->
</script>
<%
return;
}
int len=(new Long(file.length())).intValue(); String fileName=new String((file.getName()).getBytes(),"iso-8859-1"); //转换编码,取得文件名,这样就不会出现乱码了 response.reset();
response.setContentType("application/octet-stream;charset=gbk"); //设置输出响应流的消息头
response.setHeader("Content-disposition","attachment;filename=\""+fileName+"\"");
BufferedInputStream infile=new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream outfile=new BufferedOutputStream(response.getOutputStream());
int buffersize=1024;
try{
int total=0;
int once=0;
byte[] buffer=new byte[buffersize];
do{
once=infile.read(buffer); //读取文件到字节缓冲区
total=total+once;
if(once>=0)
outfile.write(buffer,0,buffersize); //将文件写入输出响应流
}while(total<len&&once>=0);
response.flushBuffer();
}
catch(Exception e){
}finally{
if(infile!=null) infile.close();
if(outfile!=null) outfile.close();
}
%>
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货