关于Struts中文件下载功能的实现?

具体步骤!... 具体步骤! 展开
 我来答
ckdprxkw
2014-06-21 · 超过55用户采纳过TA的回答
知道答主
回答量:115
采纳率:100%
帮助的人:104万
展开全部
1 使用Struts2控制文件下载 可能很多人会觉得,文件下载太简单,直接在页面上给出一个超级链接,该链接的href属性等于要下载文件的文件名,不就可以实现文件下载了吗?大部分时候的确可以实现文件下载,但如果该文件的文件名为中文文件名,则会导致下载失败;或者应用程序需要在让用户下载之前进行进一步检查,比如判断用户是否有足够权限来下载该文件等。 看下面的一个原始的下载页面代码片段: 原始的下载 包含中文文件名的下载链接 下载Struts2的Logo: 下载图形文件 下载Struts2的Logo的压缩文件: 下载压缩文件 上面页面的包含两个下载的超级链接,两个链接的资源都是存在的,但因为第一个资源文件的文件名是中文文件名,如果单击第一个超级链接,将出现如下图所示的页面。 从图中页面中椭圆形框包围的地方,我们看到被下载的文件名变成了包含大量%的字符串,很明显,这种文件名显然无法取得需要下载的文件。 为了解决这个问题,我们使用Struts2的文件下载支持来下载该文件。2 实现文件下载的Action Struts2的文件下载Action与普通的Action并没有太大的不同,仅仅是该Action需要提供一个返回InputStream流的方法,该输入流代表了被下载文件的入口。该Action类的代码如下: public class FileDownloadAction implements Action { //该属性是依赖注入的属性,该属性可以在配置文件中动态指定该属性值 private String inputPath; //依赖注入该属性值的setter方法 public void setInputPath(String value) { inputPath = value; } /* 下载用的Action应该返回一个InputStream实例, 该方法对应在result里的inputName属性值为targetFile */ public InputStream getTargetFile() throws Exception { return ServletActionContext.getServletContext().getResourceAsStream(inputPath); } //处理用户请求的execute方法,该方法返回success字符串 public String execute() throws Exception { return SUCCESS; } } 从上面的Action中看到,该Action中包含了一个getTargetFile()方法,该方法返回一个InputStream输入流,这个输入流返回的是下载目标文件的入口。该方法的方法名为getTargetFile,表明该Action有一个targetFile属性来返回下载文件。 一旦我们定义了该Action,就可通过该Action来实现文件下载。3 配置Action 配置该文件下载的Action与配置普通的Action并没有太大的不同,需要在配置普通Action的基础之上,在加上额外的download的拦截器引用。 除此之外,关键是需要配置一个类型为stream的结果,配置stream类型的结果时需要指定如下四个属性: contentType:指定被下载文件的文件类型。 inputName:指定被下载文件的入口输入流。 contentDisposition:指定下载的文件名。 bufferSize:指定下载文件时的缓冲大小。 因为stream结果类型的逻辑视图是返回给客户端一个输入流,因此无需指定location属性。 提示:配置stream类型的结果时,因为无需指定实际的显示的物理资源,所以无需指定location属性,只需要指定inputName属性,该属性指向被下载文件。 下面是配置该下载所用的Action类的配置文件片段: ?xml version="1.0" encoding="GBK"? 指定Struts2配置文件的DTD信息 http://struts.apache.org/dtds/struts-2.0.dtd"> 配置Struts2国际化资源文件的baseName 配置Struts2应用的编码集 配置下载的拦截器引用 指定被下载资源的位置 \images\中.gif 配置结果类型为stream的结果 指定下载文件的文件类型 image/gif 指定下载文件的文件位置 targetFile filename="struts.gif" 指定下载文件的缓冲大小 4096 如果通过上面的Struts2提供文件下载支持来实现文件下载,就可以实现包含中文文件名的文件下载。
AiPPT
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图... 点击进入详情页
本回答由AiPPT提供
百度网友96ffcf7
推荐于2016-07-24 · 知道合伙人互联网行家
百度网友96ffcf7
知道合伙人互联网行家
采纳数:22721 获赞数:118726
从事多年网络方面工作,有丰富的互联网经验。

向TA提问 私信TA
展开全部
用struts 2 实现文件下载功能,主要是3个部分代码的编写:
1. Web前端传入文件名参数;
2. 编写寻找文件并返回InputStream的Action;
3. 在struts.xml中进行配置。
Action中没有给出directory的get方法,其目的为保护文件路径不被访问到。
execute()方法对传入参数进行验证,若验证成功,返回success,否则返回input。
getInputStream()方法将返回一个InputStream,在struts.xml中,配置了一个参数inputStream,通过这个方法获得流对象。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式