Struts2 .apk 文件下载及解决中文文件名乱码问题(转)

1、Tomcat服务器不能下载 .apk类型文件

Android的APK安装包不能下载或下载文件是以 .zip为后缀名而不是 .apk为文件后缀名时,需在 Tomcat 的 web.xml 配置文件中加入以下 MIME 类型:

1 <mime-mapping>
2          <extension>apk</extension>
3          <mime-type>application/vnd.android.package-archive</mime-type>
4 </mime-mapping>

2、Struts2 实现文件下载并解决中文文件名乱码问题

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5     
 6 <struts>
 7        <package name="download" namespace="/" extends="struts-default">
 8            <action name="apk" class="downloadAction">
 9                <result type="stream">
10                    <!-- contentType 指定下载文件的文件类型 —— application/octet-stream 表示无限制   -->
11                    <param name="contentType">application/vnd.android.package-archive</param>
12                    <!-- inputName 流对象名 —— 这里写inputStream,它就会自动去找Action中的getInputStream方法 -->
13                    <param name="inputName">inputStream</param>
14                    <!-- contentDisposition 使用经过转码的文件名作为下载文件名",将调用该Action中的getFileName方法 -->
15                    <param name="contentDisposition">attachment;filename="${fileName}"</param>
16                    <!-- bufferSize 下载文件的缓冲大小  -->
17                    <param name="bufferSize">4096</param>
18                </result>
19            </action>
20        </package>         
21 </struts>

DownloadAction.java

 1 package com.chu.web.action.info;
 2 
 3 import java.io.InputStream;
 4 import java.net.URLEncoder;
 5 
 6 import org.apache.struts2.ServletActionContext;
 7 import org.springframework.context.annotation.Scope;
 8 import org.springframework.stereotype.Controller;
 9 
10 @Controller @Scope("prototype")
11 public class DownloadAction {
12     private String fileName;
13      
14     public void setFileName(String fileName) {
15         this.fileName = fileName;
16     }
17     public String getFileName() {
18         /*String fileName = null;
19         try {
20             //解决中文文件名乱码问题
21             fileName = URLEncoder.encode("文件下载.apk", "UTF-8");
22         } catch (UnsupportedEncodingException e) {
23             // TODO Auto-generated catch block
24             e.printStackTrace();
25         }
26         return fileName;*/
27         return URLEncoder.encode(fileName", "UTF-8");//解决中文文件名乱码问题
28      }
29 
30     public InputStream getInputStream() {
31         return ServletActionContext.getServletContext().getResourceAsStream("/WEB-INF/download/xxxxx.apk");
32     }
33     public String execute(){
34         return "success";
35     }
36 }

对于以中文命名的文件,下载时提示框中文件名如果出现乱码问题,可使用 URLEncoder.encode(fileName", "UTF-8" ); 进行URL编码,即可解决下载时显示的中文文件名乱码问题。

posted on 2014-11-24 15:24  看天空的星星  阅读(920)  评论(0编辑  收藏  举报

导航