Struts2 文件的上传与下载
来源:互联网 发布:大数据产业联盟 编辑:程序博客网 时间:2024/04/29 08:06
最近学习到了Struts2中的文件的上传与下载,因为会经常使用,所以记录下来,加深理解。
文件的上传:
在Struts中默认使用的是common-fileupload的文件上传框架,所在使用文件的上传功能之前要先在web项目中导入commons-io-2.2.jar 和 commons-fileupload-1.3.1.jar,这两个文件可以从Struts2的lib文件复制到web项目的web-inf\lib下即可。
为了能完成文件的上传,在form表单中添加属性enctype并设置为“multipart/form-data”,是设置表单的MIME编码,这样才能完整的传递文件数据。
uploadForm.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@taglib prefix="s" uri="/struts-tags" %><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>file'upload</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老处理上传文件的表单,使用File类型来封装文件域。通过getXXX()方法来获取上传文件的文件名、文件类型和文件的内容。其中的savePath变量可以通过配置文件来动态设置变量的值,在Struts2中允许在配置文件中的属性的动态指定值,
UploadAction.java
package will.action;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionSupport;import org.apache.struts2.ServletActionContext;import java.io.File;import java.io.*;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); } // title的setter和getter方法 public void setTitle(String title) { this.title = title; } public String getTitle() { return (this.title); } // upload的setter和getter方法 public void setUpload(File upload) { this.upload = upload; } public File getUpload() { return (this.upload); } // uploadContentType的setter和getter方法 public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public String getUploadContentType() { return (this.uploadContentType); } // uploadFileName的setter和getter方法 public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public String getUploadFileName() { return (this.uploadFileName); } @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; }}
配置文件山上传的Action
<action name="upload" class="will.action.UploadAction"> <param name="savePath">/uploadFiles</param> <result>/WEB-INF/content/welcome.jsp</result> </action>
注意:在使用上传的时候,需要手动创建一个临时文件夹,在上面代码中,需要创建在web应用中的目录下创建文件夹uploadFiles,如果没有指定临时文件夹,系统默认指定在Tomcat的安装路径下的work\Catalina\localhost\路径下.上面的代码需要在下图中的文件夹中建立临时的文件夹。
当上传文件的时候,请求被UploadAction处理,处理结束传入welcome.jsp页面中。
welcom.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@taglib prefix="s" uri="/struts-tags" %><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body><h1>welcome</h1>上传成功!<br/>文件的标题为:<s:property value=" + title"/><br/>文件为:<img src="<s:property value="'uploadFiles/' + uploadFileName"/>"/><br/></body></html>
上传成功后显示的页面如下:
文件的下载 :
文件下载最简单的就是在页面上给一个超级链接,链接的href属性是要下载的文件名,但是如果文件名是中文的,早期的浏览器上就会导致下载失败。而且strut2还可以对下载提供了判断,进而来控制下载。其中Struts2中的Action提供了InputStream流的方法,代表了被下载文件的入口。
Action的代码如下:
FileDownload.java
package will.action;import java.io.InputStream;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class FileDownloadAction extends ActionSupport{ private String inputPath; //该成员变量可以在配置文件中动态指定 public void setInputPath(String value){ System.out.println("--------"+value); inputPath = value; } //通过一个返回InputSteam的方法,作为下载文件的入口 //如需要配置stream类型结果是指定inputName参数,参数的值就是方法去掉get前缀、首字母小写的字符串 public InputStream getTargetFile() throws Exception{ //返回指定文件对应输入流 System.out.println(ServletActionContext.getServletContext().getResourceAsStream(inputPath)); return ServletActionContext.getServletContext().getResourceAsStream(inputPath); }}
代码中的getTargetFile()方法,就是下载目标文件的入口,方法名字映射到struts.xml文件中的inputName参数的值。
在配置Action的struts.xml文件时,要指定以下四个属性:
- contentType:指定被下载文件的文件类型
- inputName:指定被下载文件的入口输入流
- contentDisposition:指定下载文件的文件名
- bufferSize:指定下载文件时的缓冲大小
下面是Action的配置文件的片段:
<action name="Download" class="will.action.FileDownloadAction"> <!-- 指定被下载资源的位置 --> <param name="inputPath">/WEB-INF/images/gril.jpg</param> <!-- 配置结果类型为stream的结果 --> <result type="stream"> <!-- 指定下载文件的文件类型 --> <param name="contentType">image/jpg</param> <!-- 指定由getTargetFile()方法返回被下载文件的InputStream --> <param name="inputName">targetFile</param> <param name="contentDisposition">filename="log.jpg"</param> <!-- 指定下载文件的缓冲大小 --> <param name="bufferSize">4096</param> </result></action>
其中下载的主页:
<li> 下载gril图片的: <a href="Download.action">下载妹子图片</a></li>
在需要在WEB-INF中创建文件夹images放入要下载的文件。效果如下:
以上就是strut2 中文件的上传和下载的功能。
- Struts2文件的上传的与下载
- struts2 实现文件的上传与下载
- struts2实现文件的上传与下载
- struts2 的文件上传与下载
- struts2文件的上传与下载
- Struts2文件的上传与下载
- Struts2的文件上传与下载
- struts2的文件上传与下载
- Struts2实现文件的上传与下载
- struts2 文件的上传与下载
- Struts2的文件上传与下载
- struts2的文件上传与下载
- Struts2的文件上传与下载
- Struts2-14 文件的上传与下载
- Struts2 文件的上传与下载
- Struts2文件的上传与下载
- Struts2的文件上传与下载案例
- Struts2 实现文件的上传与下载
- cloudera data science workbench
- 【方法论】极限编程(XP)
- Struts2中关于页面和后台交换数据的理解
- 关于H5页面开发适配指南
- GYM 100971 J.Robots at Warehouse(bfs)
- Struts2 文件的上传与下载
- MyBatis-Spring-SqlSessionFactoryBean(session工厂)
- [CodeVersion--GIT]Win10下git管理的代码没有绿色图标
- intellij idea开发android从入门到精通(九)————IntelliJ IDEA 界面介绍
- Java改变左上角图标
- Android 设置相关(打开, 卸载等)
- 互联网架构的高并发
- java io系列
- FCLK、HCKL和PCLK的关系