各位高手,有没有遇到过下面的问题下载excel文件的时候,一般情况下都能正确地弹出对话框,提示用户打开还是保存文件。
在弹出的对话框中会正确的显示excel文件的文件名,文件种类以及服务器地址。但是偶尔(很少发生)会出现,在弹出的对话框中,文件名是乱码并且没有扩展名,文件种类是未识别的文件种类。请各位高手帮忙分析一下,为什么会出现这种情况。另外,我所做的系统是基于spring的,调用jxl来读些excel文件。

解决方案 »

  1.   

    感谢ls的回帖。是从网络上下载文件,不过,服务器和客户端都是日文操作系统所以不会存在由于不同的操作系统产生的文件无法识别的问题。感觉上就像是客户端没有装office,无法识别excel文件似的,但是客户端是装了office的,
    并且,现在系统已经正式上线运行了半年了,客户端在基本上没有出现上面的问题,只是偶然的出现了一次。
      

  2.   

    把文件名编一下码。。
    fileName = URLEncoder.encode(fileName,"utf-8");
      

  3.   

    文件名编码已经做过了,是用getBytes("Shift_JIS")做的。我觉得文件名乱码的可能性很小,如果是因为文件名编码的问题的话,不会连文件种类都无法识别。我在怀疑可能是网络传输的问题,但是始终无法再现出来。还有一个怀疑是,客户端的安全设定,或者,IE中其他的设定有问题。有过类似经验的各位大虾,给分析分析吧
      

  4.   

    下载的文件头坏了,要用iso-8859-1的名字才可以,
    filename 就是你的中文文件名,如果是utf-8的记得修改一下
    response.addHeader("Content-Disposition", new String(("attachment; filename=" + filename).getBytes("GBK"), "ISO-8859-1")); // 针对中文文件名  
      

  5.   

    我的excel文件是日文文件名,相关的code是这样的String filename = new String(title.getBytes("Shift_JIS"), "ISO-8859-1");
    response.addHeader("Content-Disposition", "attachment; filename="+ response.encodeURL(filename));应该和楼上的没什么区别吧。
    而且奇怪的是我说的问题只是在某些客户端存在问题,其他的客户端却没有问题。楼上的大虾在帮忙分析分析吧,先谢谢了。
      

  6.   

    response.encodeURL(filename)); 去掉response.encodeURL看我的写法吧!
      

  7.   


    由于现在系统处于正式运行阶段,不能随意修改程序,在我的开发环境中也无法再现上面所说的问题,所以现在还无法验证你说的方法能不能解决问题。因为上面的问题,只是在某些客户的机器上发生,并且这些客户的机器上也不是每次下载excel文件时,都发生问题,只是偶尔的发生上面所说的问题。所以,我觉得上面这段代码出问题的可能性不是很大。
    老紫竹大虾,能不能再帮帮忙,分析一下有没有其他的可能性。
      

  8.   


    能不能具体说说,在哪里能找到。我google了好几天也没找到。
      

  9.   

    哎,你无非就是要打开一个文件啊,你用流来处理,代码很简单。byte[] by="提取的数据库中的PDF二进制文件"
    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();