Struts2 文件下载

1 准备下载的文件

在WebRoot下建立upload目录,并放入一个准备下载的文件

2 编写JSP页面,提供下载链接

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>一点教程-struts2的文件下载</title>
  </head>
  <body>
  <h3>文件下载</h3>
  <a href="demo1.action">下载文件</a>
  </body>
</html>

3 编写Action,返回文件输入流

package com.yiidian.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URLEncoder;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
/**
 * 文件下载
 * @author 一点教程(yiidian.com)
 */
public class Demo1Action extends ActionSupport{
	private File file = null;
	//提供文件名称
	public String getFileName() throws Exception{
		return URLEncoder.encode(file.getName(),"utf-8");
	}
	//提供下载文件的输入流
	public InputStream getFileStream() throws Exception{
		return new FileInputStream(file);
	}
 
	@Override
	public String execute() throws Exception {
		//读取需要下载的文件
		String uploadPath = ServletActionContext.getServletContext().getRealPath("upload");
		file = new File(uploadPath+"/spring.jpg");
		//struts2是依靠一个叫stream的视图进行文件下载
		return SUCCESS;
	}
}

4 struts.xml配置下载视图

注意:inputName的值和Action的getFileStream名称是一致的!

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
	"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
	<package name="base" extends="struts-default" namespace="/">
		<action name="demo1" class="com.yiidian.action.Demo1Action">
			<!-- 文件下载必须使用stream视图 -->
			<result type="stream">
				<!-- 设置响应头 -->
				<param name="contentDisposition">attachment;filename=${fileName}</param>
				<!-- 需要下载的输入流 -->
				<param name="inputName">fileStream</param>
			</result>
		</action>
	</package>	
</struts>

5 运行测试

 

源码下载:https://pan.baidu.com/s/1b9r6ksPqr_TEWfWrypHmFA

热门文章

优秀文章