这个似乎是两个问题

1)中文文件内容乱码

2)中文文件名是乱码或文件名为空

 

第一个问题我的解决方法是,全都用utf-8编码。包括

Tomcat里的server.xml

    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443"  URIEncoding="UTF-8"/>

struts2里设置

    <constant name="struts.il8n.encoding" value="utf-8"/> 

JSP里设置

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%


第二个问题的解决方法:

在action的配置中,inputName参数是下载文件流的名称(InputStream的名称),conentDisposition中的文件名(downloadfileName)是实际下载的时候文件的名称。所以文件名称不是中文的问题,应该在这里设置的时候,转换编码。

            <action name="downloadZH"  class="com.meetcomet.util.FileDownLoadZHAction">
            <param name="path">/download</param>
            <result name="success" type="stream">
                <param name="contentType">
                    text/plain
                </param>
                <!-- 文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。 -->
                <param name="contentDisposition">
                    attachment;filename=${downloadfileName}
                </param>
                <param name="inputName">targetFile</param>
                <!-- 缓冲区大小 -->
                <param name="bufferSize">2048</param>
            </result>
            <result name="error">/fail.jsp</result>
        </action>

对应的action如下

中文名的问题,要特别注意downloadfileName的get函数。其余和非中文的相比,并无特别变化

 1 public class FileDownLoadZHAction extends ActionSupport {
 2 
 3       /**
 4       * @return
 5       */
 6       private String fileName;  
 7         private String path;  
 8         private InputStream targetFile;  
 9        private  String downloadfileName;
10         
11       public String getFileName() {
12          return fileName;
13       }
14 
15       public void setFileName(String fileName) {
16          this.fileName = fileName;
17       }
18 
19       public String getPath() {
20          return ServletActionContext.getServletContext().getRealPath(path);
21       }
22 
23       public void setPath(String path) {
24          this.path = path;
25       }
26 
27 
28 
29       public String execute() {
30            String filePath=getPath()+ "\\" +getFileName() ;  
31            System.out.println(filePath);
32             try {  
33                 targetFile=new FileInputStream(filePath);  
34                 return SUCCESS;  
35            } catch (FileNotFoundException e) {  
36                e.printStackTrace();  
37                 return ERROR;  
38            }  
39         
40       }
41 
42 
43 
44     public String getDownloadfileName() {
45          try {  
46              downloadfileName = new String(this.fileName.getBytes(), "ISO8859-1");   
47              System.out.println(downloadfileName);
48           } catch (UnsupportedEncodingException e) {  
49              e.printStackTrace();
50           }  
51          return downloadfileName;
52     }
53 
54 
55 
56     public InputStream getTargetFile() {
57         return targetFile;
58     }
59 
60     public void setTargetFile(InputStream targetFile) {
61         this.targetFile = targetFile;
62     }
63 
64     public void setDownloadfileName(String downloadfileName) 
65     {
66         this.downloadfileName=downloadfileName;
67     }
68 
69 
70 
71     }
View Code

 

 

 

posted on 2013-11-11 21:16  meetcomet  阅读(370)  评论(0编辑  收藏  举报