• 如何在struts2中实现下载?


    <a href="${pageContext.request.contextPath}/download?filename="+filename>点击下载</a>

    在action类中执行完execute方法后返回成功字符串跳转到result之后再result中设置contentType、contentDisposition、inputStream

    <result name="success" type="stream">
      <param name="contentType">${contentType}</param>
      <param name="contentDisposition">attchment;filename=${downloadFileName}</param>
      <param name="inputStream">${inputStream}</param>
    </result>

    在action类中提供对应的getContentType、getDownloadFileName、getInputStream方法

    
    

    public String getContentType() {

      String mimeType = ServletActionContext.getServletContext().getMimeType(filename);
      return mimeType;

    }

    public String getDownloadFileName() throws UnsupportedEncodingException {

      return DownloadUtils.getDownloadFileName(ServletActionContext.getRequest().getHeader("user-agent"), filename);

    }

    public InputStream getInputStream() throws FileNotFoundException,UnsupportedEncodingException {

      filename = new String(filename.getBytes("iso8859-1"), "utf-8"); // 解决中文名称乱码.

      FileInputStream fis = new FileInputStream("d:/upload/" + filename);
      return fis;
    }

     

    用DownloadUtils工具类来返回一个下载文件名,目的之为了去支持不同的浏览器,比如火狐用的是BASE64编码

    public class DownloadUtils {
    
        public static String getDownloadFileName(String agent,String filename) throws UnsupportedEncodingException{
            if(agent.contains("MSIE")){
                //IE
                filename = URLEncoder.encode(filename,"utf-8");
            }else if(agent.contains("Firefox")){
                //火狐浏览器
                BASE64Encoder base64Encoder = new BASE64Encoder();
                filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
            }else{
                //其他浏览器
                filename = URLEncoder.encode(filename,"utf-8");
            }
            return filename;
        }
        
    }
  • 相关阅读:
    Linux的五个查找命令
    jquery mobile图片自适应屏幕
    JS定时刷新页面及跳转页面
    JavaScript-每隔5分钟执行一次ajax请求的实现方法
    jquerymobile-可折叠内容(Collapsible content)
    MVC入门教程-视图中的Layout使用
    如何利用 _ViewStart.cshtml对页面添加代码?
    检测到有潜在危险的Request.Form值
    varchar(n)和varchar(max)有什么区别
    报错:System.Data.Entity.Infrastructure.DbUpdateException 更新条目时出错
  • 原文地址:https://www.cnblogs.com/zyh1994/p/5401548.html
Copyright © 2020-2023  润新知