我的代码是:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
 {
    response.setContentType(CONTENT_TYPE);    String pathsavefile;//要下载的文件
    String fileName;//保存窗口中显示的文件名
    pathsavefile=request.getParameter("filename");
    fileName=request.getParameter("newname");

  ServletOutputStream out = response.getOutputStream();
       InputStream inStream=new FileInputStream(pathsavefile);
    try
    {
       response.setContentType("APPLICATION/OCTET-STREAM");
       response.setHeader("Content-Disposition", "attachment; filename=\""+fileName+"\"");
       byte[] b = new byte[1024];
       int len;
       while((len=inStream.read(b)) >0)
         out.write(b,0,len);
       }
       catch (Exception e)
     {
       System.out.println(e);
     }
     finally
{
out.close();
       inStream.close();
};}
前几天的时候,点击连接,就给这个Servlet发送一个请求,然后页面端就会出现一个保存还是打开的窗口,如果下载一个xxx.doc的文件,就会出现这个文件名,但是现在突然出现一串无规律的字符串,而且文件类型也是未知,下载之后,就是那个无规律字符串的没有文件类型的文件,巨郁闷,我的发布平台是websphere,恳请大虾帮忙解决了,看看可能是什么地方出现了问题,这些先谢谢了!

解决方案 »

  1.   

    fileName=request.getParameter("newname");
    可能要转码!
      

  2.   

    response.setHeader(
    "Content-Disposition",
    "attachment; filename=\"" + toUtf8String(filename) + "\"");
    public static String toUtf8String(String s) {
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    if (c >= 0 && c <= 255) {
    sb.append(c);
    } else {
    byte[] b;
    try {
    b = String.valueOf(c).getBytes("utf-8");
    } catch (Exception ex) {
    System.out.println(ex);
    b = new byte[0];
    }
    for (int j = 0; j < b.length; j++) {
    int k = b[j];
    if (k < 0)
    k += 256;
    sb.append("%" + Integer.toHexString(k).toUpperCase());
    }
    }
    }
    return sb.toString();
    }
      

  3.   

    请问楼上的大虾,如何转码?我页面跟这个Servlet里面都设定了是GB2312,请明示,谢谢!
      

  4.   

    response.setContentType("application/msword");
              response.addHeader("Content-Disposition",
                                 "attachment;filename=\"" + "xxxx" + ".doc"");xxxx 可以改
      

  5.   

    而且每点击一次下载,下载同一个文件,IE端提示下载的那个窗体上面的文件名都是不一样的,这次可能是CAA7KXEJ.下次可能就是CA……别的,前面两个字母肯定是‘CA’,MD,我又不是国航的人,干嘛非得给我显示CA啊,气死我了。大虾们帮帮忙,而且我后台已经转码过,用system.out.println(),输出过转码之后的,没有问题,都显示正常,就是到了页面端,显示这个乱码,NND
      

  6.   

    搞定了,果然是Utf8的问题,谢谢诸位大虾,马上发分!