struts配置:
<action name="newMatchUserList" class="cn.com.dcj.homepage.admin.newMatchMng.action.NewMatchUserListAction">
  <result name="excel" type="stream">
  <param name="contentType">application/octet-stream;</param>
  <param name="inputName">excelStream</param>   
  <param name="contentDisposition">attachment;filename="test.xls"</param>   
  <param name="bufferSize">1024</param>
  </result>
  </action>现在问题是点击下载,IE浏览器,始终是在页面直接打开,而火狐则是正常弹出下载框下载。
红色字体部分貌似不起作用,即使红色部分改成inline,两种浏览器表现方式依然如上。
望有经验的前辈指教!

解决方案 »

  1.   

    下载建议不要使用配置文件的方式来设置下载方式,而是通过下载页面实现(需要smartupload.jar)。
    我的实现方式是使用smartupload:
    unload.jsp<%@ page contentType="text/html;charset=utf-8" import="org.lxh.smart.*"%>
    <% 
    String fileName=request.getParameter("fileName");
    String newFileName=request.getParameter("newFileName");
    try{
    //newFileName+=fileName.substring(fileName.lastIndexOf("."));
    //newFileName = EncodingChange.toUtf8String(newFileName);
    // 新建一个SmartUpload对象 
    SmartUpload su = new SmartUpload(); 
    // 初始化 
    su.initialize(pageContext); 
    // 设定contentDisposition为null以禁止浏览器自动打开文件, 
    //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为 
    //doc时,浏览器将自动用word打开它。扩展名为pdf时, 
    //浏览器将用acrobat打开。 
    su.setContentDisposition(null); 
    // 下载文件 
    //su.downloadFile("/archives/file/"+fileName);
    su.downloadFile(pageContext.getSession().getServletContext().getRealPath("/")+"/clientlog/"+fileName,null,newFileName);
    out.clear();
    out=pageContext.pushBody();
    }catch(Exception e){
     e.printStackTrace();
     out.println("<br>");
     out.println("<br>");
     out.println("<br>");
     out.println("<font color=red size=3 align=\"center\">您下载的文件找不到!可能已经丢失,请与管理员联系</font>");
     out.println("<a href=\"#\" onclick=\"history.go(-1)\">返回</a>");
    }
    %>
    这里:页面需要接受2个参数:
    String fileName=request.getParameter("fileName");
    String newFileName=request.getParameter("newFileName");
    因为通常情况下我们都是在数据库中为上传的文件生成一个唯一的代码,这个和上传的实际文件名不相同,在下载的时候传递给页面, newFileName 则是下载弹出框提示的另存为的文件名。
    注意:pageContext.getSession().getServletContext().getRealPath("/")+"/clientlog/"+fileName 是下载的相对路径,根据你自己的项目设置。