`
wangqiang6028
  • 浏览: 86247 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

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

阅读更多

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

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics