struts2使用action方式实现文件下载(支持中文文件名)

来源:互联网 发布:sql r2是什么 编辑:程序博客网 时间:2024/06/14 16:50
  • 【1】支持中文名称文件(源文件中文名称、下载另存为为中文名称)
  • 【2】加入session判断,还可进行权限控制

action类:

package com.fsti.ssh.action;import java.io.InputStream;import java.io.UnsupportedEncodingException;import org.apache.log4j.Logger;import org.apache.struts2.ServletActionContext;/** * 文件下载 【1】支持中文文件名称 【2】加入session判断,还可进行权限控制 *  * @author deniro */public class FileDownloadAction extends AuthorityAction {/** *  */private static final long serialVersionUID = 1L;static Logger log = Logger.getLogger(FileDownloadAction.class);/** * 被下载的资源路径 */private String inputPath;public void setInputPath(String inputPath) {this.inputPath = inputPath;}/** * 文件名 */private String fileName;public void setFileName(String fileName) {this.fileName = fileName;}/** * 获取下载显示的文件名称 *  * @return */public String getDownloadFileName() {String downFileName = fileName;try {downFileName = new String(downFileName.getBytes(), "ISO8859-1");} catch (UnsupportedEncodingException e) {log.error("获取下载显示的文件名称",e);}return downFileName;}/** * 配置stream类型结果时,需指定inputName;inputName为方法名去掉get前缀,并且首字母小写的字符串; * 比如此例中的inputName为 targetFile *  * @return */public InputStream getTargetFile() {InputStream resourceAsStream = ServletActionContext.getServletContext().getResourceAsStream(inputPath);log.info("resourceAsStream:"+resourceAsStream);//若为NULL,则说明未取到文件,请确认文件路径是否正确。return resourceAsStream;}}


struts配置文件:

<!-- 指定struts2 DTD信息 --><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"    "http://struts.apache.org/dtds/struts-2.1.7.dtd"><struts><package name="download" extends="struts-default"><action name="download" class="com.fsti.ssh.action.FileDownloadAction"><!-- 被下载的资源路径 --><param name="inputPath">\WEB-INF\download\灯塔.jpg</param><!-- 下载显示的文件名称 --><param name="fileName">灯塔.jpg</param><result name="success" type="stream"> <!-- 指定下载文件的文件类型 --><param name="contentType">application/octet-stream;charset=ISO8859-1</param><!-- 指定stream方法名称 --><param name="inputName">targetFile</param><!-- 文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,默认为直接显示文件 --><param name="contentDisposition">attachment;filename="${downloadFileName}"</param><!-- 指定下载文件的缓冲大小 --><param name="bufferSize">4096</param></result></action></package></struts>

jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!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-8"><title>文件下载(支持中文文件名称)</title></head><body><p><span><a href="download.action" target="_blank">下载</a></span></p><div class="divider"></div><ul><li>【1】支持中文名称文件(源文件中文名称、下载另存为为中文名称)</li><li>【2】加入session判断,还可进行权限控制</li></ul></body></html>


原创粉丝点击