我也遇到同样问题至今没有解决,在tomcat下是会出现的,在weblogin下虽不会出此异常但弹也下载对话中无法显示中文文件名.如下:
<%@ page import="java.io.*" %>
<%
try { String fileName=converStr(request.getParameter("FileName"));
String serverFileName =request.getParameter("ServerFileName"); String url="D:/beaTest/user_projects/mydomain1/applications/QHOA/"+"upload/document/"+serverFileName;
System.out.println("fileName="+fileName);//此处可以输也正常的中文文件名
FileInputStream inStream=new FileInputStream(url);
ServletOutputStream os=response.getOutputStream();
//设置输出的格式
response.reset();
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename="+fileName);
//循环取出流中的数据
byte[] b = new byte[1024];
int len;
while((len=inStream.read(b)) >0){
os.write(b,0,len);
}
inStream.close();
os.close();
}catch(IOException ex){
//ex.printStackTrace();
}%><%!
/*
* 字符转换
* @ param str
* @ return
*/
private synchronized String converStr(String str)
{
String _str="";
try
{
_str=new String(str.getBytes("ISO-8859-1"));
}
catch (Exception e){}
return _str;
}
%>
<%@ page import="java.io.*" %>
<%
try { String fileName=converStr(request.getParameter("FileName"));
String serverFileName =request.getParameter("ServerFileName"); String url="D:/beaTest/user_projects/mydomain1/applications/QHOA/"+"upload/document/"+serverFileName;
System.out.println("fileName="+fileName);//此处可以输也正常的中文文件名
FileInputStream inStream=new FileInputStream(url);
ServletOutputStream os=response.getOutputStream();
//设置输出的格式
response.reset();
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename="+fileName);
//循环取出流中的数据
byte[] b = new byte[1024];
int len;
while((len=inStream.read(b)) >0){
os.write(b,0,len);
}
inStream.close();
os.close();
}catch(IOException ex){
//ex.printStackTrace();
}%><%!
/*
* 字符转换
* @ param str
* @ return
*/
private synchronized String converStr(String str)
{
String _str="";
try
{
_str=new String(str.getBytes("ISO-8859-1"));
}
catch (Exception e){}
return _str;
}
%>
试试看OutputStream os = response.getOutputStream();然后代码中response.getOutputStream()都用os代替掉。
你说的那个我试过了 还是报与上面相同的错
多了几行可能是因为b的大小是100,write(b)的时候是写入大小为b的数据,而最后一次的len是小于100的。
看看,应该有用