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编码,即可解决下载时显示的中文文件名乱码问题。
时间: 2024-10-10 07:13:32