struts2文件下载
来源:程序员人生 发布时间:2015-06-16 08:15:16 阅读次数:2491次
有些时候,如果我们提供的下载文件包括中文名称,直接给出该地址会报错。这时候我们就需要自己写1个action来实现文件下载的功能。
前台界脸部分:
<%@ page language="java" contentType="text/html; charset=UTF⑻"
pageEncoding="UTF⑻"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<base href="<%=basePath%>">
<!-- 导入struts2标签库 -->
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF⑻">
<title>上传成功</title>
</head>
<body>
<a href="downLoadAction.action">下载word文档</a>
</body>
</html>
action部份:
package com.hcj.action;
import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.hcj.model.Book;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class DownLoadAction extends ActionSupport {
//该属性是依赖注入的属性,可以在配置文件中动态指定该属性值
private String inputPath;
//依赖注入该属性之的setter方法
public void setInputPath(String inputPath) {
this.inputPath = inputPath;
}
/*
* 定义1个返回InputStream的方法
* 该方法将作为被下载文件的入口,
* 且需要配置stream类型结果时指定inputName参数
* inputSteam参数的值就是方法去掉get前缀,首字母小写的字符串
*/
public InputStream getTargetFile() throws Exception {
//返回指定文件对得输入流
return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
}
struts.xml配置:
<action name="downLoadAction" class="com.hcj.action.DownLoadAction">
<!-- 指定被下载资源的位置 -->
<param name="inputPath">/upload/实习生计划-张某某.docx</param>
<!-- 配置结果类型为stream的结果 -->
<result name="success" type="stream">
<!-- 指定被下载文件的文件类型(此处为后缀为.docx的word文档) -->
<param name="contentType">application/vnd.openxmlformats-officedocument.wordprocessingml.document</param>
<!-- 指定由getTargetFile()方法被下载文件的inputStream -->
<param name="inputName">targetFile</param>
<param name="contentDisposition">filename="test.docx"</param>
<!-- 指定下载文件缓冲大小 -->
<param name="bufferSize">4096</param>
</result>
</action>
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠