struts2下实现文件下载功能

struts2下实现文件下载功能

下面以实现一个图片下载功能为例:

1. 项目结构


2. web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

  <!-- 设置struts 2过滤器 -->
  <filter>
      <filter-name>struts 2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>struts 2</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  
  <!-- 设置欢迎页面 -->
  <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- session超时定义,单位为分钟 -->
  <session-config>
      <session-timeout>30</session-timeout>
  </session-config>
  
</web-app>

3.DownloadAction.java

package com.action;

import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class DownloadAction extends ActionSupport{
    private static final long serialVersionUID = 1L;
    //文件路径
    private String path;
    
    //path属性的getter方法
    public String getPath(){
    	return path;
    }
    //path属性的setter方法
    public void setPath(String path){
    	this.path = path;
    }
    //返回inputstream,文件下载关键方法
    public java.io.InputStream getDownloadFile() throws Exception{
    	InputStream in = ServletActionContext.getServletContext().getResourceAsStream(getPath());
    	return in;
    }
    public String execute() throws Exception{
    	return SUCCESS;
    }
}

4.struts.xml

<?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>
	 <!-- 配置 Struts 2 应用中的常量 --> 
	 <constant name="struts.i18n.encoding" value="UTF-8" /> 
         <!-- 配置上传文件的最大容量,struts2默认为2M。单位是1B, 1KB=1024B,1M=1024KB,1M=1024*1024B-->
         <constant name="struts.multipart.maxSize" value="1048576" />
     
     
	 <!-- 配置本应用中的包,继承 struts-default 包 --> 
	 <package name="FileDownload" namespace="/" extends="struts-default"> 
		 <action name="download" class="com.action.DownloadAction"> 
			 <!-- 设置文件路径的参数,传到action类文件中去 -->
			 <!-- <param name="path">\download\a.jpg</param> -->
			 <!-- 下载文件类型定义,即定义为“stream” -->
			 <result name="success" type="stream">
				 <!-- image/jpeg代表JPG图片 -->
				 <param name="contentType">image/jpeg</param>
				 <!-- 下载文件处理方法 -->
				 <param name="contentDisposition">
				     <!-- attachment表示附件方式,即下载时打开保存对话窗,filename表示下载时显示的保存时的文件名 -->
				         <!-- 如果不写attachment;或者是写的是inline; 则表示内联,即会在浏览器中尝试打开下载的文件,而不是下载-->
				     attachment;filename="a.jpg"        
				 </param>
				 <!-- 下载文件输出流定义 -->
				     <!-- 这里的inputName元素所对应的value值downloadFile,在action中一定要有对应的getDownloadFile()方法 -->
				 <param name="inputName">downloadFile</param>
				 <!-- 下载缓冲区的大小 -->
				 <param name="bufferSize">1024</param>
			 </result> 
		 </action>
	 </package> 
</struts>    

5.index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>首页</title>
  </head>
  <body>
    <center> 
     	欢迎来到首页,点下面链接去下载一个文件<br />
     	<a href="download.action?path=<%="./download/a.jpg" %>">下载</a>   
    </center>
  </body>
</html>

6.文件路径

项目中要提前建立好download目录,和里面要存在有a.jpg文件,否则,下载会失败。

7.功能入口

项目发布到服务器后,用浏览器访问项目中的index.jsp ,点击下载链接,就可以弹出“下载”对话框。


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值