我的系统是java+struts+jsp
我想实现对其文件的下载
目前已实现一种方式
但是出现一点问题,比如下载文件如.exe时可以跳出文件另存为窗口
但碰到如文本文件或者pdf文件时,不是跳出另存为窗口,而是直接在ie打开
现在想的是所有的文件都是通过另存为窗口
请高手帮忙
(最好是实例)

解决方案 »

  1.   


    <%       
      //得到文件名字和路径       
      String filename = "test.txt";       
      String filepath = "F:\\";       
                                                          
      //     设置响应头和下载保存的文件名       
      response.setContentType("APPLICATION/OCTET-STREAM");       
      response.setHeader("Content-Disposition",       
                        "attachment; filename=\"" +  filename +  "\"");       
                                  
      //     打开指定文件的流信息       
      java.io.FileInputStream     fileInputStream     =       
                       new     java.io.FileInputStream(filepath     +     filename);       
      
       //     写出流信息       
       int     i;       
       while     ((i=fileInputStream.read())     !=     -1)     {       
          out.write(i);       
       }       
       fileInputStream.close();       
       out.close();       
    %>      
      

  2.   

    估计是你的电脑设定问题。打开我的电脑 -〉 工具 -〉 文件夹选项 -〉 文件种类 -〉 找到pdf -〉 详细设定 -〉下载打开确认打对钩
      

  3.   

    我用的是SmartUpload方式下载,所有文件都是以另存为的方式打开,直接下载,还能提高下载速度。写个jsp,传过来url和title就可以title为文件名进行下载了。
    下面是jsp:
    <%@ page contentType="text/html;charset=gb2312" 
    import="com.jspsmart.upload.*" %><% 
    String url = request.getParameter("url");
    String title = request.getParameter("title");
    String extName = url.substring(url.lastIndexOf("."),url.length());
    title = title + extName;
    // 新建一个SmartUpload对象 
    SmartUpload su = new SmartUpload();
    // 初始化
    su.initialize(pageContext); 
    // 设定contentDisposition为null以禁止浏览器自动打开文件, 
    //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为 
    //doc时,浏览器将自动用word打开它。扩展名为pdf时, 
    //浏览器将用acrobat打开。 
    su.setContentDisposition(null); 
    // 下载文件 
    su.downloadFile(url,extName,title); 
    %>下载中文文件名字的时候有乱码,你可以把title加密和解密
    下载的文件有中文乱码,我修改了SmartUpload类,很多,也可以贴给你如果你需要。
      

  4.   

    ContentType不设置的话 如何指定编码呢?
    还请koko指教阿
      

  5.   

    SmartUpload完全可以实现的
    我以前写过,如果需要,我可以找找代码,看看有没有了
      

  6.   

    下载的SmartUpload对中文文件有编码的问题,下载有的时候是乱码
    最好是在jsp中设定编码,然后改相应的SmartUpload类,把编码改过来。
    将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名。
      

  7.   

    在SmartUpload中覆盖这个方法。 public void downloadFile(String s, String s1, String s2, int i)
         throws ServletException, IOException, SmartUploadException
       {
        if(s == null)
            throw new IllegalArgumentException("File '" + s + "' not found (1040).");
        if(s.equals(""))
            throw new IllegalArgumentException("File '" + s + "' not found (1040).");
        if(!isVirtual(s) && m_denyPhysicalPath)
            throw new SecurityException("Physical path is denied (1035).");
        if(isVirtual(s))
            s = m_application.getRealPath(s);
        java.io.File file = new java.io.File(s);
        FileInputStream fileinputstream = new FileInputStream(file);
        long l = file.length();
        boolean flag = false;
        int k = 0;
        byte abyte0[] = new byte[i];
        if(s1 == null)
            m_response.setContentType("application/x-msdownload");
        else
        if(s1.length() == 0)
            m_response.setContentType("application/x-msdownload");
        else
            m_response.setContentType(s1);
        m_response.setContentLength((int)l);
        m_contentDisposition = m_contentDisposition != null ?
        m_contentDisposition : "attachment;";
        if(s2 == null)
            m_response.setHeader("Content-Disposition", 
            m_contentDisposition + " filename=" + 
            toUtf8String(getFileName(s)));
        else
        if(s2.length() == 0)
            m_response.setHeader("Content-Disposition", 
            m_contentDisposition);
        else
            m_response.setHeader("Content-Disposition", 
            m_contentDisposition + " filename=" + toUtf8String(s2));
        while((long)k < l)
        {
            int j = fileinputstream.read(abyte0, 0, i);
            k += j;
            m_response.getOutputStream().write(abyte0, 0, j);
        }
        fileinputstream.close();
        }
    再增加这个方法: 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 = Character.toString(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();
       } 
    就可以解决下载时中文乱码的问题了
      

  8.   

    KOKO右键另存为的方法是不可行的,如果是*.rar文件,下载下来的将是和浏览器打开的是一个模样!很郁闷
      

  9.   

    请问koko函数的注释可以写的详细点么那函数的几个形参都是些什么啊?