/*
 * 文件名:DownLoadAction.java
 * 版权:Copyright 2016 Huawei Tech. Co. Ltd. All rights Reserved.
 * 描述:
 * 修改人:cWX340527
 * 修改时间:2016年3月4日
 * 修改内容:新增
 */
package com.huawei.srcms.securityreport.web;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import org.apache.struts2.ServletActionContext;

import sun.misc.BASE64Encoder;

import com.huawei.srcms.common.base.web.BaseAction;
import com.huawei.srcms.common.exception.SRCMSException;
import com.huawei.srcms.common.util.SRCMSUtils;
import com.huawei.srcms.securityreport.service.ISecurityReportService;

/**
 * 下载文件Action<描述>.
 * @author cWX340527
 * @version 1.0, 2016年3月4日
 */
public class DownLoadAction extends BaseAction
{
    private static final long serialVersionUID = 1L;

private ISecurityReportService securityReportService;

/**
     * 文件流
     */
    private InputStream inputStream;

/**
     * 需要下载的文件名称
     */
    private String filename;//下载页面传递了该参数,需提供setter方法接收

public void setFilename(String filename)
    {
        //转码并防御xss攻击转换
        try
        {
            this.filename = SRCMSUtils.xssfilter(new String(filename.getBytes("ISO-8859-1"), "utf-8").trim());
        }
        catch (UnsupportedEncodingException e)
        {
        LOG.error("setFilename is fail:"+e.toString());
        }
    }

public String downloadFile() throws SRCMSException
    {
        try
        {
            this.inputStream = this.securityReportService.downloadfile(this.filename);
        }
        catch (FileNotFoundException e)
        {
            LOG.error("get " + this.filename + " exception.", e.getMessage());
            throw new SRCMSException("get " + this.filename + " exception.");
        }
        
        //返回一个文件输入流
        if (this.inputStream == null)
        {
            this.message = "下载文件【" + this.filename + "】失败。";
            return ERROR;
        }
        return SUCCESS;
    }

//为客户端提供输入流
    public InputStream getInputStream()
    {
        return this.inputStream;
    }

//根据不同的文件动态给出MIME文件类型
    public String getContentType()
    {
        //在Tomcat Conf里的web.xml有对应的映射文件
        return ServletActionContext.getServletContext().getMimeType(this.filename);
    }

//返回一个文件名
    public String getFilename() throws IOException
    {
        String agent = ServletActionContext.getRequest().getHeader("user-agent");//根据http头信息获取对应的浏览器类型
        return encodeDownloadFilename(filename, agent);
    }

//下载附件名乱码问题 , IE和火狐 解决不同   IE默认是Url编码 火狐默认是base64编码
    public String encodeDownloadFilename(String fileName, String agent) throws IOException
    {
        if (agent.contains("Firefox"))
        { // 火狐浏览器
            fileName = "=?UTF-8?B?" + new BASE64Encoder().encode(fileName.getBytes("utf-8")) + "?=";
        }
        else
        { // IE及其他浏览器
            fileName = URLEncoder.encode(fileName, "utf-8");
        }
        return fileName;
    }

/**
     * @return the service
     */
    public ISecurityReportService getSecurityReportService()
    {
        return this.securityReportService;
    }

/**
     * @param service the service to set
     */
    public void setSecurityReportService(ISecurityReportService service)
    {
        this.securityReportService = service;
    }

}

downfile文件下载相关推荐

  1. java ftp下载文件源码_java实现ftp文件下载的源代码

    这几天做的一个项目中用到了ftp文件传输,用java实现了ftp文件的下载. 一.win7下搭建ftp服务器 详见:http://jingyan.baidu.com/article/4b52d7026 ...

  2. Service实现文件下载

    首先在Activity中声明Intent对象,启动Service: //生成Intent对象 Intent intent = new Intent(); //将文件名对象存入到intent对象当中 i ...

  3. java 实现文件下载保存框_Java开发网 - 任何类型的文件下载时都会弹出文件保存框的实现(原创)...

    于 2002-12-12 11:09 :):):)任何类型的文件下载时都会弹出文件保存框的实现:(:(:( 简介: 从事WEB程序设计的朋友一定都遇到过这种情况吧,对于一些操作系统可以识别的文件类型如 ...

  4. java上传ftp_java实现FTP文件上传与文件下载

    本文实例为大家分享了两种java实现FTP文件上传下载的方式,供大家参考,具体内容如下 第一种方式: package com.cloudpower.util; import java.io.File; ...

  5. java 导出表格打包zip文件下载_asyExcel导出excel并打包成zip压缩包下载

    假期期间自己在家撸码,刚好用到了导出,导出来之后是多个文件,所以需要打成压缩包并下载来给客户.查阅了一些资料,把这段代码贴在这,相当于有个记录吧. package com.business.testE ...

  6. php ccontroller,FineCMS controllers\ApiController.php 函数downAction 任意文件下载

    漏洞文件在D:\wamp\www\controllers\ApiController.php中的downAction函数 ``` /** * 下载文件 */ public function downA ...

  7. 任意文件下载(读取)

    目录 漏洞简介 产生原因 漏洞利用 常见敏感文件路径 Windows系统 Linux系统 Web应用 PHP ASP ASPX JSP 漏洞利用方法 注意事项 漏洞测试 漏洞简介 一些网站由于业务需求 ...

  8. 文件下载多级文件生成ZIP压缩包

    文件下载,压缩包生成 1.文件下载 2.多级文件生成压缩包 1.文件下载 1.网上文件下载,一抓一大把.分享下一下资源 package io.renren.archives.controller;im ...

  9. .net下进行文件下载

    .net 下进行文件下载有两种模式,下面分类进行讲解 直接通过文件所在地址进行下载 这种方法最简单,直接通过访问文件所在的网址进行下载 1.在当前页面下载 <a href="/port ...

最新文章

  1. reflow 和 repaint
  2. Python中都全局变量和局部变量
  3. 58. 最后一个单词的长度 golang string类的用法
  4. 计算机技术知识字,计算机基础知识
  5. 图解java多线程设计模式 pdf_图解Java设计模式之状态模式
  6. 《Python程序设计》在亚马逊京东当当互动出版网淘宝全面上架
  7. 前端笔记 | CSS盒子模型
  8. 翁恺老师的细胞自动机
  9. tracert命令详解
  10. linux下显卡不工作,Ubuntu 12.04下升级Nvidia后Bumblebee无法工作解决
  11. windows10更新怎么关闭
  12. .net编程的十大技巧 转载之Jeffery.Sun
  13. 2021年中国机动车、汽车和新能源汽车保有量及驾驶人和驾驶证业务办理情况分析「图」
  14. 浅谈《守望先锋》中的 ECS 构架
  15. 树莓派通过MFRC522写UIC卡0扇区
  16. 解决no matching host key type found. Their offer: ssh-rsa报错信息具体方法
  17. 【金融财经】金融市场一周简报(2017-12-29)
  18. 中科院计算所培训中心开启课程研发新征程
  19. 滴水逆向学习笔记 -2-
  20. WSN 数据链路层协议 SMAC,TMAC…TRAMA...BMAC ,XMAC, ZMAC

热门文章

  1. 双非硕士 | 0实习 | 1个月上岸深信服售前产品经理提前批
  2. 北京2022冬奥会落下帷幕,东方旗龙旗杆闪耀赛场
  3. 【zxshuba散文】 我们要让生命更美丽
  4. 研制量子计算机的现实性,科学家研制半导体微型芯片 量子计算机或成现实
  5. TexStudio使用教程
  6. java安装证书_Java SSL证书的安装
  7. 上海布局“元宇宙”新赛道,发力点在哪里?《元宇宙十大技术》作者、元宇宙产业委李安民主任:这项技术是核心
  8. 树莓派:无显示器PC远程控制树莓派,通过网线orWiFi
  9. 陈天奇等人新作引爆AI界
  10. VJC案例-光控手控灯开关设计