各位高手,有没有遇到过下面的问题下载excel文件的时候,一般情况下都能正确地弹出对话框,提示用户打开还是保存文件。
在弹出的对话框中会正确的显示excel文件的文件名,文件种类以及服务器地址。但是偶尔(很少发生)会出现,在弹出的对话框中,文件名是乱码并且没有扩展名,文件种类是未识别的文件种类。请各位高手帮忙分析一下,为什么会出现这种情况。另外,我所做的系统是基于spring的,调用jxl来读些excel文件。
在弹出的对话框中会正确的显示excel文件的文件名,文件种类以及服务器地址。但是偶尔(很少发生)会出现,在弹出的对话框中,文件名是乱码并且没有扩展名,文件种类是未识别的文件种类。请各位高手帮忙分析一下,为什么会出现这种情况。另外,我所做的系统是基于spring的,调用jxl来读些excel文件。
并且,现在系统已经正式上线运行了半年了,客户端在基本上没有出现上面的问题,只是偶然的出现了一次。
fileName = URLEncoder.encode(fileName,"utf-8");
filename 就是你的中文文件名,如果是utf-8的记得修改一下
response.addHeader("Content-Disposition", new String(("attachment; filename=" + filename).getBytes("GBK"), "ISO-8859-1")); // 针对中文文件名
response.addHeader("Content-Disposition", "attachment; filename="+ response.encodeURL(filename));应该和楼上的没什么区别吧。
而且奇怪的是我说的问题只是在某些客户端存在问题,其他的客户端却没有问题。楼上的大虾在帮忙分析分析吧,先谢谢了。
由于现在系统处于正式运行阶段,不能随意修改程序,在我的开发环境中也无法再现上面所说的问题,所以现在还无法验证你说的方法能不能解决问题。因为上面的问题,只是在某些客户的机器上发生,并且这些客户的机器上也不是每次下载excel文件时,都发生问题,只是偶尔的发生上面所说的问题。所以,我觉得上面这段代码出问题的可能性不是很大。
老紫竹大虾,能不能再帮帮忙,分析一下有没有其他的可能性。
能不能具体说说,在哪里能找到。我google了好几天也没找到。
response.setContentType("application/force-download");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-disposition","attachment; filename=你需要的名字任意定义或者动态定义"); BufferedOutputStream fos = new BufferedOutputStream(response.getOutputStream());
if(by!=null){
fos.write(by);
}
fos.flush();
fos.close();