程序员人生 网站导航

struts2文件下载

栏目:php教程时间:2015-06-16 08:15:16

有些时候,如果我们提供的下载文件包括中文名称,直接给出该地址会报错。这时候我们就需要自己写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>


------分隔线----------------------------
------分隔线----------------------------

最新技术推荐