java response 下载文件个浏览器文件名防止乱码_Adan_best的博客-程序员秘密

技术标签: 文件名乱码  java  

    public void getDownLoad(String fileName, HttpServletRequest request, HttpServletResponse response) {
        response.reset();
        // response.setContentType("application/vnd.ms-excel;charset=utf-8");
        // 设置文件下载的格式
        // response.setContentType("application/x-excel");
        response.setContentType("application/octet-stream");
//        response.setHeader("content-disposition", "attachment;filename*=utf-8'zh_cn'" + URLEncoder.encode(fileName, "UTF-8"));
//        setFileDownloadHeader(response, fileName);
        String fileName2 = fileName;
        try {
            String userAgent = request.getHeader("User-Agent");  
            byte[] bytes = userAgent.contains("MSIE") ? fileName.getBytes() : fileName.getBytes("UTF-8");
            // name.getBytes("UTF-8")处理safari的乱码问题  
            // 各浏览器基本都支持ISO编码  
            fileName = new String(bytes, "ISO-8859-1");
            // 文件名外的双引号处理firefox的空格截断问题  
            response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", fileName));

           //获取输入流 todo

           //获取输出流

           //输入流数据写入输出流

           //下面是伪代码 

           FileInputStream inputStream = new FileInputStream(file);  
      
                //3.通过response获取ServletOutputStream对象(out)  
                out = response.getOutputStream();  
      
                int b = 0;  
                byte[] buffer = new byte[512];  
                while (b != -1){  
                    b = inputStream.read(buffer);  
                    //4.写到输出流(out)中  
                    out.write(buffer,0,b);  
                }  
                inputStream.close();  
                out.close();  
                out.flush();  
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        }

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baidu_35962462/article/details/81675827

智能推荐

解决了困扰几天的问题---java.sql.SQLException: Cannot set uid: incompatible types. Query: select * from orders_runner.query报红_pbrong的博客-程序员秘密

      最近在学着做一个jsp+servlet的商城项目,在做的过程中使用到了一个Order实体类用于对应我数据库中的orders表,可是在查询正确的情况下报了这个错误 java.sql.SQLException: Cannot set uid: incompatible types. Query: select * from orders where uid = ? Parameters: ...

mac上安装windows系统_mac装windows__Bruce的博客-程序员秘密

1、mac自带的bootcamp安装windows,两个系统相对独立,在开机时选择;2、用PD在mac上安装虚拟机,然后再在PD内安装windows系统,因此,两个系统可以同时运行,但是这样内存是共用的,windows系统是基于mac的虚拟机上运行的。

SD卡协议_OnePlusZero的博客-程序员秘密

Overview深入理解SD卡系列文章将介绍SD卡,涉及SD卡的协议及驱动代码。我们学习SD卡目的是为了理解SD卡的驱动代码,修改它,最终解决工作中遇到的SD卡相关的问题。本系列文章的目标是理解SD,包括协议和驱动代码。在学习任何设备驱动时,有个东西我们是无法绕过的,那就是协议,本文讲的就是SD卡的协议。学习SD卡协议,可以让我们更好的了解SD卡的运作机制。在最开始学习SD卡的时候,我们只...

BehaviourTree AI 行为树AI 实现的一些总结思考_wsxiaodong的博客-程序员秘密

GameRes游资网授权发布 文 / 杨漱玉青   Behaviour Tree的AI模块现在被很多地方所采用,前段时间自己实现了一个AI套件在Unity,中间也遇到了不少坑,现在来总结一下心得。   网上有很多行为树AI的介绍和实现,在这就不重复了。   更新频率过快导致的行为表现异常   行为树模块需要周期性的更新,先说说连续几个周期存在的问题。如果这个周期满足条件是Actor A走到Act...

jmeter性能指标_张永胜_的博客-程序员秘密

Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”。今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅。如果大家都是做Web应用的性能测试,例如只有一个登录的请求,那么在Aggregate Report中,会显示一行数据,共有10个字段,含义分别如下。Label:每个 JMeter 的 element(例如 ...

随便推点

《程序员升职记》1.收发室_Vincent's Blog的博客-程序员秘密

收发室第一关是引导关,非常简单,要做的事情就是把输入的内容原封不动的输出。可用的指令只有INBOX和OUTBOX-- HUMAN RESOURCE MACHINE PROGRAM -- INBOX OUTBOX INBOX OUTBOX INBOX OUTBOX ...

SQL语句中计算百分比_sql 良率计算_Mr_YDK的博客-程序员秘密

SQL语句中计算百分比  A.TOTAL_COUNT TOTALCOUNT,   A..QUES_COUNT  QUESCOUNT,   CASEWHEN TOTAL_COUNT = QUES_COUNTTHEN '100%'ELSE TO_CHAR((ROUND(QUES_COUNT / DECODE(TOTAL_COUNT, 0, 1, TOTAL_COUNT), 4)

超详细 Hadoop2.0高可用集群搭建方案_未来属于你的博客-程序员秘密

Hadoop完全分布式中的概念在Hadoop完全分布式的安装配置中,可以配置多个Namenode(两个)形成互为热备的状态,解决Namenode单节点故障的问题两个Namenode直接通过JN集群来共享数据,基本原理和Zookeeper类似,处于Active状态的Namenode通过将元数据的更新发送给大部分JN机器,保证只要JN集群大部分的机器存活,处于StandBy状态的Nameno...

Linux动态链接库的命名及版本升级管理_linux动态库 升级_sanlinux的博客-程序员秘密

linkname libhello.sosoname libhello.so.1realname libhello.so.1.1......

WM20工程详解_worthsen的博客-程序员秘密

1 介绍2 细节2.1 执行程序只能唯一执行使用QShareMemory创建共享内存2.2 类声明代替头文件若头文件中没有创建某个类的对象,可以不写 #include <类名&amp

OSG学习:裁剪变换(1)_weixin_30528371的博客-程序员秘密

在OSG中,默认了6个裁剪平面以去除没有必要显示的物体。也可以自己定义其他的裁剪平面来确定裁剪。 osg::ClipPlane类继承自osg::StateAttribute类,封装了OpenGL中的glClipPlane()函数。 在类的成员函数中,设置裁剪平面的有下面几个函数:void setClipPlane(const Plane &plane)voi...