1. 先在资源文件夹下放入两个资源文件:Java程序设计.zip和logo.jpg
2. 下载 页面index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>文件下载</title>
</head>
<body>
<a href="resource/Java程序设计.zip">下载文件zip</a>
<br/>
<a href="resource/logo.jpg">下载文件jpg</a>
</body>
</html>
这样可以发现,点击下载文件zip这个链接是会报错,而下载文件jpg这个链接可以正常下载。可以使用Struts2的文件下载支持来下载文件名含有中文字符的文件。
3. 处理文件下载的Action:
package com.huey.action;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
* DownloadAction,用于处理文件下载
* @version 2012-08-21
* @author Huey2672
*
*/
public class DownloadAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 3827210335251861916L;
// 该属性在struts.xml中配置,被下载文件的所在路径
private String inputPath;
public void setInputPath(String inputPath) {
this.inputPath = inputPath;
}
/**
* 该方法为文件下载的入口,返回类型为java.io.InputStream
* @return 指定要下载的文件对应的输入流
* @throws Exception
*/
public InputStream getTargetFile() throws Exception {
return ServletActionContext.getServletContext()
.getResourceAsStream(inputPath);
}
}
4. 在struts.xml文件中配置Action:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 指定Struts2文件上传过程中的临时文件夹 -->
<constant name="struts.multipart.saveDir" value="D:\\apache-tomcat-6.0.36\\webapps\\UploadingDemo\\WEB-INF\\upload\\tmp"/>
<package name="download" extends="struts-default">
<action name="download" class="com.huey.action.DownloadAction">
<!-- 指定被下载文件的物理资源 -->
<param name="inputPath">\resource\Java程序设计.zip</param>
<!-- type属性值为stream,用于支持文件下载功能 -->
<result name="success" type="stream">
<!-- 指定被下载文件的文件类型 -->
<param name="contentType">application/zip</param>
<!-- 指定被下载文件的入口输入流,与Action中方法名对应 -->
<param name="inputName">targetFile</param>
<!-- 指定被下载文件的文件名 -->
<param name="contentDisposition">filename="JavaProgramDesign.zip"</param>
<!-- 指定被下载文件的文件类型缓冲大小,单位字节 -->
<param name="bufferSize">4096</param>
</result>
</action>
</package>
</struts>
6. 修改下载页面index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>文件下载</title>
</head>
<body>
<a href="download.action">下载文件zip</a>
<br/>
<a href="resource/logo.jpg">下载文件jpg</a>
</body>
</html>