struts文件下载

struts2文件下载,根据浏览器的不同会有不同的错误出现。有的在ie下正常,但是到了火狐就不可以了。具体原因现在还不得知。主要的问题还是在下载文件名为中文的情况,英文没有太多的区别。这里给出详细代码

jsp页面: <a href="<s:url value='employee/test!downloadFile.action'><s:param name='fileName'>ttt.doc</s:param> </s:url>">下载</a>

action中:

 // 文件下载
      public InputStream getDownloadFile() throws Exception{
          System.out.println(getFileName());
          InputStream inputStream = ServletActionContext.getServletContext().getResourceAsStream("/file/廖哲毅论文2.doc");
          System.out.println(inputStream);
          return inputStream;
     }
  
      // 下载
      public String downloadFile() throws Exception {
          return SUCCESS;
     }
    
    //定义文件名称
    private String fileName;
    public void setFileName(String name) throws Exception{
//在IE下可以正常显示中午名称,但是在火狐下就不可以了。具体原因不详
this.fileName = new String(name.getBytes("ISO8859-1"), "utf-8"); } public String getFileName(){ return this.fileName; }

struts.xml配置文件:

<action name="test" class="testAction">
            <result name="successf">/index.jsp
            </result>
            <result name="success" type="stream">
            <!--指定文件下载类型     application/octet-stream默认值可以下载所有类型    -->
                <param name="contentType">
                     application/octet-stream;
                </param>
             <!-- 指定下载的文件名和显示方式 ,但注意中文名的乱码问题,解决办法是:进行编码处理(不同浏览器会有不同情况)-->
             <!--contentDisposition是文件下载的处理方式,包括内联(inline)和附件(attachment),
                                   默认是inline, 使用附件时这样配置:attachment;filename="文件名" 。-->
                <param name="contentDisposition">
                   attachment;filename="${fileName}"
                 </param>
                <!--由getDownloadFile()方法获得inputStream-->
                 <param name="inputName">downloadFile</param>
                 <!--  指定下载文件的缓存大小-->
                 <param name="bufferSize">2048</param>
             </result>
         </action>
原文地址:https://www.cnblogs.com/kailing-con/p/4244139.html