【正式开始前的唠嗑】——春节假期还是如期而终,各位小伙伴是不是和我一样患上了“假期综合症”呢?工作状态简直太差了!博客也好久没写了,现在来总结总结struts2中文件的下载和上传!
Part1——文件下载
struts2提供了stream结果类型专门用于支持文件下载,指定stream结果类型时需指定一个inputName参数,该参数指定了一个被下载文件的入口的输入流。
下载页面:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Struts 2的文件下载</title> </head> <body> <h1>Struts 2的文件下载</h1> <ul> <li> 下载图片: <a href="download.action">下载图形文件</a> </li> </ul> </body> </html>
相应的Action:
public class FileDownloadAction extends ActionSupport { // 该成员变量可以在配置文件中动态指定该值 private String inputPath; // inputPath的setter方法 public void setInputPath(String value) { inputPath = value; } /* 定义一个返回InputStream的方法,用于被下载文件的入口, 且需要配置stream类型结果时指定inputName参数, inputName参数的值就是方法去掉get前缀、首字母小写的字符串 */ public InputStream getDownloadFile() throws Exception { // ServletContext提供getResourceAsStream()方法 // 返回指定文件对应的输入流 return ServletActionContext.getServletContext() .getResourceAsStream(inputPath); } }
struts.xml中的配置:
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 配置Struts 2应用的字符集 --> <constant name="struts.i18n.encoding" value="GBK"/> <package name="lee" extends="struts-default"> <action name="download" class="org.crazyit.app.action.FileDownloadAction"> <!-- 指定被下载资源的位置 --> <param name="inputPath">/WEB-INF/images/疯狂联盟.jpg</param> <!-- 配置结果类型为stream的结果 --> <result name="success" type="stream"> <!-- 指定下载文件的文件类型 --> <param name="contentType">image/jpg</param> <!-- 指定由getDownloadFile()方法返回被下载文件的InputStream --> <param name="inputName">downloadFile</param> <param name="contentDisposition">filename="wjc_logo.jpg"</param> <!-- 指定下载文件的缓冲大小 --> <param name="bufferSize">4096</param> </result> </action> </package> </struts>
注:1)contentType还包括诸如application/zip(压缩类型)、text/html(文本类型)等
2)contentDisposition默认是inline(内联)的,默认情况下,文本、图片等文件会在网页中直接打开,压缩文件才会弹出保存对话框;修改成attachment;fileName="${filename}"才会无论啥类型的文件都会弹出保存询问对话框。
3)如果想要在用户下载之前进行权限检查,就必须要让struts2来控制下载——例如可以根据ActionContext的getSession()方法取出HttpSession,透过session判断当前用户是否有下载权限,如果没有跳转到相应的处理页面(如登录、注册等),相应地,必须在struts.xml配置。
Part2——文件上传
struts2的文件上传更是比较常见的使用情况。
上传页面实例:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>简单的文件上传</title> </head> <body> <s:form action="upload" enctype="multipart/form-data"> <s:textfield name="title" label="文件标题"/> <s:file name="upload" label="选择文件"/> <s:submit value="上传"/> </s:form> </body> </html>
相应地Action:
public class UploadAction extends ActionSupport { // 封装文件标题请求参数的属性 private String title; // 封装上传文件域的属性 private File upload; // 封装上传文件类型的属性 private String uploadContentType; // 封装上传文件名的属性 private String uploadFileName; // 直接在struts.xml文件中配置的属性 private String savePath; // 接受struts.xml文件配置值的方法 public void setSavePath(String value) { this.savePath = value; } // 获取上传文件的保存位置 private String getSavePath() throws Exception { return ServletActionContext.getServletContext() .getRealPath(savePath); } // 各属性的setter和getter方法。。。 @Override public String execute() throws Exception { // 以服务器的文件保存地址和原文件名建立上传文件输出流 FileOutputStream fos = new FileOutputStream(getSavePath() + "\\" + getUploadFileName()); FileInputStream fis = new FileInputStream(getUpload()); byte[] buffer = new byte[1024]; int len = 0; while ((len = fis.read(buffer)) > 0) { fos.write(buffer , 0 , len); } fos.close(); return SUCCESS; } }
struts.xml配置:
<struts> <!-- 设置该应用使用的字符集 --> <constant name="struts.i18n.encoding" value="GBK"/> <package name="lee" extends="struts-default"> <!-- 配置处理文件上传的Action --> <action name="upload" class="org.crazyit.app.action.UploadAction"> <!-- 动态设置Action的属性值 --> <param name="savePath">/uploadFiles</param> <!-- 配置Struts 2默认的视图页面 --> <result>/WEB-INF/content/succ.jsp</result> </action> </package> </struts>
注:1)关于文件上传的容量控制可在struts.xml中(全局:<constant name="struts.multipart.maxSize" value="20000" />;局部写在拦截器中:<param name="maxmumSize">20000</param>)或struts.properties中指定;
2)处理上传的Action必须定义三个private属性: xxx, xxxFileName, xxxContentType, 其中xxx与上传页面的<s:file name="upload" label="选择文件"/>name属性值必须对应。同时不要忘记着三个属性的getter/setter方法。否则不一致的话会获取不到
3)可在配置文件中为上传的action配置拦截器(被该Action配置包围),配置允许上传的文件类型和文件大小等信息。
相关推荐
在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...
Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。
在Struts2中,文件上传和下载是常见的功能需求,对于用户交互和数据交换至关重要。以下是对这些知识点的详细阐述: 1. **文件上传**: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它是一个Apache提供...
在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...
总之,这个项目实例为使用Struts2和Uploadify实现带进度条的多文件上传及下载功能提供了一个基础模板,对于学习和实践此类功能的开发者来说是一个有价值的参考。通过深入研究和理解这个项目的代码,可以提升对Struts...
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括处理用户表单提交、进行文件上传和下载。在Web应用中,文件上传和下载是常见的需求,例如用户上传头像、下载文档等。Struts2通过其Action类和...
综上所述,Struts2文件上传下载和表单重复提交涉及多个技术点,包括Struts2的配置、文件操作、HTTP响应头设置、安全性和异常处理。理解并熟练掌握这些知识点,对于构建健壮的Web应用程序至关重要。
在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户在Web表单中提交的文件,如图片、文档等。下面将详细介绍Struts2中文件上传和下载的实现方法。 ### 1. 文件上传 #### 1.1 配置Struts2 首先,我们...
需求 1.能够对多个文件进行上传(可以选择上传文件个...提供多文件上传,上传成功后,提供刚上传的文件下载功能(其他的都可以在其上面进行扩充) 多文件 上传 下载 随意文件 java Struts2 单例 配置 动态读取 李顺利
Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括文件上传和下载。在Struts2中处理文件上传和下载是常见的需求,对于构建交互式的Web应用来说至关重要。以下将详细介绍Struts2中如何实现这两个...
例如,Struts 1和Struts 2在处理文件上传和下载的方式上有显著区别,Struts 2引入了更多面向Action的API和拦截器机制。 5. **源代码分析** 在提供的压缩包文件`upload`中,可能包含了Action类、Struts配置文件、...
2. **添加Struts2插件**:Struts2的文件上传功能依赖于`struts2-convention-plugin`和`struts2-core`等库。在`struts.xml`配置文件中,需要启用Multipart解析器,例如添加`<constant name="struts.multipart.parser...
这个压缩包包含了实现Struts2文件上传所需的全部jar包,这些库文件对于理解和实现文件上传功能至关重要。 首先,我们要了解Struts2文件上传的基本流程。当用户通过表单提交包含文件输入字段的请求时,Struts2框架会...
总的来说,Struts2的多文件上传通过引入Apache Commons库,提供了简洁的API和配置,使得开发者能轻松处理用户上传的多个文件。无论是使用List集合还是数组,核心原理都是相同的,只是接收上传文件的对象类型不同。...
Struts2 文件上传和下载是Web开发中常见的情景,主要涉及到HTML表单、HTTP请求、文件处理以及服务器端的响应。以下将详细介绍Struts2框架下如何进行文件的上传和下载。 首先,理解文件上传的基本原理至关重要。当在...
在实际项目中,文件上传和下载功能是必不可少的,本实例将详细讲解如何在Struts2框架下实现单个文件及多个文件的上传与下载。 首先,我们需要在Struts2的配置文件(struts.xml)中添加相关的Action配置,以便处理文件...
总之,Struts2的文件上传和下载功能是基于Commons FileUpload库实现的,通过配置Struts2拦截器和编写Action逻辑,可以方便地处理用户的文件交互需求。理解和掌握这一过程对于Java Web开发者来说是非常重要的,它能...
在Struts1中,文件上传和下载是常见的功能,尤其在处理用户交互和数据交换时非常有用。下面将详细介绍如何使用Struts1实现文件上传和下载,以及涉及到的关键知识点。 **一、文件上传** 1. **表单配置**:在HTML...
在Struts2中,文件上传和下载是常见的功能,对于用户交互和数据交换至关重要。这篇内容将深入讲解如何在Struts2中实现多文件的上传和下载。 1. **文件上传** 文件上传在Web应用中常常用于让用户提交各种类型的文件...