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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值