1、Tomcat服务器不能下载 .apk类型文件
Android的APK安装包不能下载或下载文件是以 .zip为后缀名而不是 .apk为文件后缀名时,需在 Tomcat 的 web.xml 配置文件中加入以下 MIME 类型:
<mime-mapping> <extension>apk</extension> <mime-type>application/vnd.android.package-archive</mime-type> </mime-mapping>
2、Struts2 实现文件下载并解决中文文件名乱码问题
struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="download" namespace="/" extends="struts-default"> <action name="apk" class="downloadAction"> <result type="stream"> <!-- contentType 指定下载文件的文件类型 —— application/octet-stream 表示无限制 --> <param name="contentType">application/vnd.android.package-archive</param> <!-- inputName 流对象名 —— 这里写inputStream,它就会自动去找Action中的getInputStream方法 --> <param name="inputName">inputStream</param> <!-- contentDisposition 使用经过转码的文件名作为下载文件名",将调用该Action中的getFileName方法 --> <param name="contentDisposition">attachment;filename="${fileName}"</param> <!-- bufferSize 下载文件的缓冲大小 --> <param name="bufferSize">4096</param> </result> </action> </package> </struts>
DownloadAction.java
package com.chu.web.action.info;
import java.io.InputStream;
import java.net.URLEncoder;
import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
@Controller @Scope("prototype")
public class DownloadAction {
private String fileName;
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFileName() {
/*String fileName = null;
try {
//解决中文文件名乱码问题
fileName = URLEncoder.encode("文件下载.apk", "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return fileName;*/
return URLEncoder.encode(fileName", "UTF-8");//解决中文文件名乱码问题
}
public InputStream getInputStream() {
return ServletActionContext.getServletContext().getResourceAsStream("/WEB-INF/download/xxxxx.apk");
}
public String execute(){
return "success";
}
}
对于以中文命名的文件,下载时提示框中文件名如果出现乱码问题,可使用 URLEncoder.encode(fileName", "UTF-8" ); 进行URL编码,即可解决下载时显示的中文文件名乱码问题。