SpringMVC 文件下载时 浏览器不能正确显示另存的文件名

Easter79
• 阅读 620

问题:通过打印输出流的方式把文件下载到本地,但是在firebox 中 下载的文件不显示文件的文件名,造成文件不能直接打开,其他浏览器可以直接打开.

原因: 主要是文件名称中有汉字而没有转码造成firebox浏览器不能正确显示另存的文件名

解决方案:

//提供如下工具类将 文件名编码 就可以啦
public static String toUtf8String(HttpServletRequest request, String s) { 
        String agent = request.getHeader("User-Agent"); 
        try { 
            boolean isFireFox = (agent != null && agent.toLowerCase().indexOf("firefox") != -1); 
            if (isFireFox) { 
                s = new String(s.getBytes("UTF-8"), "ISO8859-1"); 
            } else { 
                s = toUtf8String(s); 
                if ((agent != null && agent.indexOf("MSIE") != -1)) { 
                    // see http://support.microsoft.com/default.aspx?kbid=816868 
                    if (s.length() > 150) { 
                        // 根据request的locale 得出可能的编码 
                        s = new String(s.getBytes("UTF-8"), "ISO8859-1"); 
                    } 
                } 
            } 
        } catch (UnsupportedEncodingException e) { 
             log.error("将文件名中的汉字转为UTF8编码的串时错误,输入的字符串为:" + s); 
        } 
        return s; 
    }

不兼容浏览器: firebox

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
LinMeng LinMeng
4年前
下载二维码至钉盘
后端生成二维码的普通文件流,前端接收后在img标签中渲染将二维码下载至钉盘通过接口获取后端返回mediaId字段,采用“dingtalkjsapi”插件中的方法下载注意:dingTalkFun中,除了corId和mediaId必传外,文件名name也是必须要传的!!!<template<divclass"onlineSign"
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java+web+批量下载文件
JavaWeb文件下载功能文件下载的实质就是文件拷贝,将文件从服务器端拷贝到浏览器端,所以文件下载需要IO技术将服务器端的文件读取到,然后写到response缓冲区中,然后再下载到个人客户端。1\.文件名接受前端发来的文件名获取到前端页面发送过来的要下载的文件的名字StringfilenameValuereq.getP
MaxSky MaxSky
3年前
分享一个适用于 Windows 桌面程序自更新的 Bat 批处理
可用于WindowsPC桌面端软件更新并重启自行替换$ORIGIN_FILE$为需删除的旧文件名称,$DOWNLOAD_FILE$为下载的新文件名称。$NEW_FILE$为需要重命名的下载文件名称。bash@echoofffor/l%%ain(1,1,10)do(for/f%%cin('del/
Stella981 Stella981
3年前
H5中canvas和svg绘图方式介绍
在HTML5中包括了两种绘图方式,canvas和svg(矢量呈现),而与canvas不同的是,svg是一种XML标记语言,它既可以单独保存以“.svg”为后缀的文件在浏览器中打开显示,也支持建立svg标签直接嵌入在网页中显示,还可以通过<embedsrc"文件.svg"name"name自命"type"image/svgxml"height
Stella981 Stella981
3年前
Linux下的快捷键整理
20191026   00:37:25今天上网整理了相关资料,希望对大家有用:1.关于终端的快捷键:Tab:tab键是比较常用的一个快捷键,它的作用是补全文件名或者路径。举例来说,输入”cd /ho”在按一下tab键,终端里就会显示”cd /home”了。如果您的文件夹下,有两个名字开头部分相同的文件,比如
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Linux file 命令
file 命令在Linux中用来识别文件类型,也可用来辨别一些文件的编码格式。它通过查看文件头部信息来获取文件类型。命令格式file参数文件地址命令参数_\b_列出文件辨识结果时,不显示文件名称。_\c_详细显示指令执行过
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k