downfile文件下载
/*
* 文件名: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文件下载相关推荐
- java ftp下载文件源码_java实现ftp文件下载的源代码
这几天做的一个项目中用到了ftp文件传输,用java实现了ftp文件的下载. 一.win7下搭建ftp服务器 详见:http://jingyan.baidu.com/article/4b52d7026 ...
- Service实现文件下载
首先在Activity中声明Intent对象,启动Service: //生成Intent对象 Intent intent = new Intent(); //将文件名对象存入到intent对象当中 i ...
- java 实现文件下载保存框_Java开发网 - 任何类型的文件下载时都会弹出文件保存框的实现(原创)...
于 2002-12-12 11:09 :):):)任何类型的文件下载时都会弹出文件保存框的实现:(:(:( 简介: 从事WEB程序设计的朋友一定都遇到过这种情况吧,对于一些操作系统可以识别的文件类型如 ...
- java上传ftp_java实现FTP文件上传与文件下载
本文实例为大家分享了两种java实现FTP文件上传下载的方式,供大家参考,具体内容如下 第一种方式: package com.cloudpower.util; import java.io.File; ...
- java 导出表格打包zip文件下载_asyExcel导出excel并打包成zip压缩包下载
假期期间自己在家撸码,刚好用到了导出,导出来之后是多个文件,所以需要打成压缩包并下载来给客户.查阅了一些资料,把这段代码贴在这,相当于有个记录吧. package com.business.testE ...
- php ccontroller,FineCMS controllers\ApiController.php 函数downAction 任意文件下载
漏洞文件在D:\wamp\www\controllers\ApiController.php中的downAction函数 ``` /** * 下载文件 */ public function downA ...
- 任意文件下载(读取)
目录 漏洞简介 产生原因 漏洞利用 常见敏感文件路径 Windows系统 Linux系统 Web应用 PHP ASP ASPX JSP 漏洞利用方法 注意事项 漏洞测试 漏洞简介 一些网站由于业务需求 ...
- 文件下载多级文件生成ZIP压缩包
文件下载,压缩包生成 1.文件下载 2.多级文件生成压缩包 1.文件下载 1.网上文件下载,一抓一大把.分享下一下资源 package io.renren.archives.controller;im ...
- .net下进行文件下载
.net 下进行文件下载有两种模式,下面分类进行讲解 直接通过文件所在地址进行下载 这种方法最简单,直接通过访问文件所在的网址进行下载 1.在当前页面下载 <a href="/port ...
最新文章
- reflow 和 repaint
- Python中都全局变量和局部变量
- 58. 最后一个单词的长度 golang string类的用法
- 计算机技术知识字,计算机基础知识
- 图解java多线程设计模式 pdf_图解Java设计模式之状态模式
- 《Python程序设计》在亚马逊京东当当互动出版网淘宝全面上架
- 前端笔记 | CSS盒子模型
- 翁恺老师的细胞自动机
- tracert命令详解
- linux下显卡不工作,Ubuntu 12.04下升级Nvidia后Bumblebee无法工作解决
- windows10更新怎么关闭
- .net编程的十大技巧 转载之Jeffery.Sun
- 2021年中国机动车、汽车和新能源汽车保有量及驾驶人和驾驶证业务办理情况分析「图」
- 浅谈《守望先锋》中的 ECS 构架
- 树莓派通过MFRC522写UIC卡0扇区
- 解决no matching host key type found. Their offer: ssh-rsa报错信息具体方法
- 【金融财经】金融市场一周简报(2017-12-29)
- 中科院计算所培训中心开启课程研发新征程
- 滴水逆向学习笔记 -2-
- WSN 数据链路层协议 SMAC,TMAC…TRAMA...BMAC ,XMAC, ZMAC
热门文章
- 双非硕士 | 0实习 | 1个月上岸深信服售前产品经理提前批
- 北京2022冬奥会落下帷幕,东方旗龙旗杆闪耀赛场
- 【zxshuba散文】 我们要让生命更美丽
- 研制量子计算机的现实性,科学家研制半导体微型芯片 量子计算机或成现实
- TexStudio使用教程
- java安装证书_Java SSL证书的安装
- 上海布局“元宇宙”新赛道,发力点在哪里?《元宇宙十大技术》作者、元宇宙产业委李安民主任:这项技术是核心
- 树莓派:无显示器PC远程控制树莓派,通过网线orWiFi
- 陈天奇等人新作引爆AI界
- VJC案例-光控手控灯开关设计