首页 > 代码库 > 文件下载时附件名乱码问题

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

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

临时想到一种办法:

即:

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

?
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转换为空格,这样又空格再转换回来,就不影响下载的文件名称了,呵呵!