文件下载时附件名乱码问题

文件下载过程中,会出现中文名乱码或者文档名称中含有空格的,需要处理下,否则要么乱码,要么空格变成了“+”号,有点头疼。

临时想到一种办法:

即:

//定义输出文件编码及类型和文件名

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

/**

     * 查看附件

     */

    public
String view() {

        try
{

            Attachment newAttach = attachService.getAttachment(attach.getId());

            if
(attach != null) {

                try
{                  

                    InputStream inStream = new
FileInputStream(newAttach

                            .getFilePath());

                    this.getResponse().reset();

                    this.getResponse().setContentType("bin");

                    this.getResponse().addHeader(

                            "Content-Disposition",

                            "attachment; filename=\""

                                    + URLEncoder.encode(newAttach.getName(),

                                            "UTF-8").replace("+", "%20") + "\"");

                    // 循环取出流中的数据

                    byte[] b = new
byte[512];

                    int
len;

                    this.getResponse().getOutputStream().flush();

                    while
((len = inStream.read(b)) > 0) {

                        this.getResponse().getOutputStream().write(b, 0, len);

                    }

                    inStream.close();

                } catch
(FileNotFoundException e) {

                    //e.printStackTrace();

                    this.sendMessage("error");

                } catch
(IOException e) {

                    this.sendMessage("error");

                    //e.printStackTrace();

                }

            }

        } catch
(DAOException e) {

            e.printStackTrace();

            this.addActionMessage(e.getMessage());

            return
ERROR;

        }

        return
null;

    

这样,在UrlEncode 之后, 将 "+" 替换成
"%20",因为浏览器将%20转换为空格,这样又空格再转换回来,就不影响下载的文件名称了,呵呵!

时间: 2024-10-06 14:27:18

文件下载时附件名乱码问题的相关文章

兼容各浏览器的文件下载时中文名称乱码的解决方案

public class DownloadServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // codes.. String name = "中文名 带空格 的测试文件.txt"; String userAgent = request.get

用commons-email,javax.mail发送邮件,中文附件名乱码。

import java.io.UnsupportedEncodingException; import javax.mail.internet.MimeUtility; import org.apache.commons.mail.EmailAttachment; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.MultiPartEmail; public class MailTest {

通过freemarker出word的技术解决方案_通过点击一个按钮临时实现生成一个word,解决出word时中文文件名乱码问题,解决打开出word时打开的word出现问题的问题,出图片,解决动态列表

 通过freemarker制作word比较简单 步骤:制作word模板.制作方式是:将模板word保存成为xml----在xml的word模板中添加相应的标记----将xml的word文件的后缀名改成ftl文件 详细步骤如下: 模板制作(将要动态显示的数据打上标记,这个标记是freemarker中的EL标记,要注意的是,要控制值为空的情况,下面${(site.wzmc)?default("")}标识当网站名称为空的时候显示空值,如果这里如果不做控制,在实际项目中会显示错误!) 另外

C# 发送邮件 附件名称为空

 示例代码: // 1.创建邮件 MailMessage mailMsg = new MailMessage(); mailMsg.To.Add(new MailAddress("[email protected]")); // 2.设置邮件标题.正文等信息 mailMsg.HeadersEncoding = Encoding.GetEncoding("gb2312"); mailMsg.SubjectEncoding = Encoding.GetEncoding(

C# MailMessage Attachment 中文名附件发邮件-Firefox中文显示正常,网页打开邮件附件中文名乱码

一.故事 首先通过CDO.Message来获取邮件EML相关数据:邮件标题.邮件内容.邮件附件.发件人.收件人.CC主要就这么几个,其次通过MailMessage来组织邮件通过Python来发送邮件! 就这么简简单单的需求!!问题出现了,中文附件名!Web打开始终是乱码!使用邮件客户端FireFox是OK的,查看了FireFox源码发现是乱码,这点说明FireFox的强大,非常强大! Content-Type: application/octet-stream; name=鎶ラ攢鍗昪s.xlsx

使用mod_encoding使apache支持中文附件名

本地测试环境为apache2.2.31,PHP5.3.27,操作系统为RHEL6.4x86_64,使用mod_encoding工具使apache支持中文附件名,比如http://www.example.com/合同.rar 1.先修改操作系统的语言环境,使linux本地支持中文,可以查看中文文件名 修改/etc/sysconfig/i18n文件将LANG="en_US.UTF-8"SYSFONT="latarcyrheb-sun16"修改为 LANG="z

eclipse运行 Maven Test命令时控制台输出乱码的解决办法

在Maven的pom.xml文件中增加: <properties>      <argLine>-Dfile.encoding=UTF-8</argLine> </properties> 今天突然遇到这个问题了,上网搜了一下,答案一大堆,还是这个最好!记录一下! eclipse运行 Maven Test命令时控制台输出乱码的解决办法,布布扣,bubuko.com

C++编译时函数名修饰约定规则(很具体),MFC提供的宏,extern &quot;C&quot;的作用

调用约定: __cdecl __fastcall与 __stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法. 1.__stdcall调用约定:函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈, 2._cdecl是C和C++程序的缺省调用方式.每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大.函数采用

Maven 执行Javadoc时控制台输出乱码问题

1.0  Maven 执行Javadoc时控制台输出乱码问题 问题描述 最近项目中使用maven-javadoc-plugin生成javadoc时,myEclipse控制台乱码. 插件配置 问题分析 检查maven输出时采用的编码格式 很显然maven默认输出采用GBK编码 myEclipse控制台输出编码,默认采用的是工作空间的编码格式. 改为 结果如下: 来自:http://www.cnblogs.com/albert-sun/archive/2013/03/21/2973993.html