7、Struts2实现文件上传和下载
一、实现单个文件上传
1、创建如下web项目结构
2、在src下的com.action包下创建UploadAction.java
- package com.action;
- import java.io.File;
- import javax.servlet.ServletContext;
- import org.apache.commons.io.FileUtils;
- import org.apache.struts2.ServletActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- /**
- * 单个文件上传
- * @author Dell
- *
- */
- public class UploadAction extends ActionSupport {
- //封装上传文件属性==form表单中file文件域的name属性值保持一致
- private File upload;
- //封装上传文件的类型,固定语法=file文件域name属性值+ContextType;
- private String uploadContentType;
- //封装文件上传名,固定语法=file文件域name属性值+FileName
- private String uploadFileName;
- @Override
- public String execute() throws Exception {
- //获取上下文对象
- ServletContext appliaction=ServletActionContext.getServletContext();
- //获取要保存文件的位置
- String path=appliaction.getRealPath("/upload");
- //创建一个与上传同名的文件
- File file=new File(path,uploadFileName);
- //将临时文件内容拷贝到目标文件夹下的那个同名的文件
- FileUtils.copyFile(upload, file);
- //删除临时文件
- upload.delete();
- return SUCCESS;
- }
- public File getUpload() {
- return upload;
- }
- public void setUpload(File upload) {
- this.upload = upload;
- }
- public String getUploadContentType() {
- return uploadContentType;
- }
- public void setUploadContentType(String uploadContentType) {
- this.uploadContentType = uploadContentType;
- }
- public String getUploadFileName() {
- return uploadFileName;
- }
- public void setUploadFileName(String uploadFileName) {
- this.uploadFileName = uploadFileName;
- }
- }
UploadAction.java
3、在src下创建struts.xml文件
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" >
- <struts>
- <!-- 中文乱码处理 -->
- <constant name="struts.i18n.encoding" value="UTF-8"/>
- <constant name="struts.devMode" value="true"/>
- <!-- 设置上传文件的总大小 -->
- <constant name="struts.multipart.maxSize" value="200000000"/>
- <package name="default" namespace="/" extends="struts-default">
- <!--文件上传 -->
- <action name="*" class="com.action.{1}Action" method="execute">
- <result>/success.jsp</result>
- <result name="input">/error.jsp</result>
- <interceptor-ref name="defaultStack">
- <!-- 配置文件上传的大小,这里配置的是上传文件的单个大小 -->
- <param name="fileUpload.maximumSize">20971520</param>
- <!-- 配置文件上传允许的类型 -->
- <param name="fileUpload.allowedTypes">text/plain,application/msword</param>
- <!-- 配置文件的扩展名 -->
- <param name="fileUpload.allowedExtensions">.txt,.doc</param>
- </interceptor-ref>
- </action>
- </package>
- </struts>
struts.xml
4、在WebRoot下创建upload文件夹
5、编辑WebRoot下的WEB-INF下的web.xml文件
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <welcome-file-list>
- <welcome-file>upload.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
web.xml
6、在WebRoot下创建upload.jsp文件
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%@ taglib uri= "/struts-tags" prefix="s" %>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>单个文件上传</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <s:form action="Upload.action" enctype="multipart/form-data" method="post">
- <s:textfield name="title" label="标题"/><br/>
- <s:file name="upload" label="选择文件"/><br/>
- <s:submit name="submit" value="上传文件"/>
- </s:form>
- </body>
- </html>
upload.jsp
7、在WebRoot下创建success.jsp文件
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%@ taglib uri="/struts-tags" prefix="s" %>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'index.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- 上传成功!
- 您所上传的文件是:<s:property value="uploadFileName"/><br/>
- 文件类型:<s:property value="uploadContentType"/><br/>
- </body>
- </html>
success.jsp
8、在WebRoot下创建error.jsp文件
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'MyJsp.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- 操作失败!!
- </body>
- </html>
error.jsp
9、运行
二、上传多个文件
(接着上面的项目进行)
1、在src的com.action包下创建ManyUploadAction.java
- package com.action;
- import java.io.File;
- import javax.servlet.ServletContext;
- import org.apache.commons.io.FileUtils;
- import org.apache.struts2.ServletActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- /**
- * 多个文件上传
- * @author Dell
- *
- */
- public class ManyUploadAction extends ActionSupport {
- //封装上传文件属性==form表单中file文件域的name属性值保持一致
- private File[] upload;
- //封装上传文件的类型,固定语法=file文件域name属性值+ContextType;
- private String[] uploadContentType;
- //封装文件上传名,固定语法=file文件域name属性值+FileName
- private String[] uploadFileName;
- @Override
- public String execute() throws Exception {
- //获取上下文对象
- ServletContext appliaction=ServletActionContext.getServletContext();
- //获取要保存文件的位置
- String path=appliaction.getRealPath("/upload");
- for (int i = 0; i < upload.length; i++) {
- //创建一个与上传同名的文件
- File file=new File(path,uploadFileName[i]);
- //将临时文件内容拷贝到目标文件夹下的那个同名的文件
- FileUtils.copyFile(upload[i], file);
- //删除临时文件
- upload[i].delete();
- }
- return SUCCESS;
- }
- public File[] getUpload() {
- return upload;
- }
- public void setUpload(File[] upload) {
- this.upload = upload;
- }
- public String[] getUploadContentType() {
- return uploadContentType;
- }
- public void setUploadContentType(String[] uploadContentType) {
- this.uploadContentType = uploadContentType;
- }
- public String[] getUploadFileName() {
- return uploadFileName;
- }
- public void setUploadFileName(String[] uploadFileName) {
- this.uploadFileName = uploadFileName;
- }
- }
ManyUploadAction.java
2、在WebRoot下创建manyUpload.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%@ taglib uri= "/struts-tags" prefix="s" %>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>多个文件上传</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <s:form action="ManyUpload.action" enctype="multipart/form-data" method="post">
- <s:file name="upload" label="选择文件1"/><br/>
- <s:file name="upload" label="选择文件2"/><br/>
- <s:file name="upload" label="选择文件3"/><br/>
- <s:file name="upload" label="选择文件4"/><br/>
- <s:file name="upload" label="选择文件5"/><br/>
- <s:submit name="submit" value="上传文件"/><br/>
- </s:form>
- </body>
- </html>
manyUpload.jsp
3、运行
三、文件下载
(接着上面的项目进行)
1、在src下的com.action包下创建FileDownAction.java
- package com.action;
- import java.io.BufferedInputStream;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.InputStream;
- import org.apache.struts2.ServletActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- /**
- * 文件下载
- * @author Dell
- *
- */
- public class FileDownAction extends ActionSupport{
- //读取下载文件的目录
- private String inputPath;
- //下载文件的文件名
- private String fileName;
- //读取下载文件的输入流
- private InputStream inputStream;
- //下载文件的类型
- private String contentType;
- @Override
- public String execute() throws Exception {
- return SUCCESS;
- }
- public String getInputPath() {
- return inputPath;
- }
- public void setInputPath(String inputPath) {
- this.inputPath = inputPath;
- }
- public String getFileName() {
- return fileName;
- }
- public void setFileName(String fileName) {
- this.fileName = fileName;
- }
- //创建InputStream输入流
- public InputStream getInputStream() throws FileNotFoundException {
- //得到下载文件的实际路径
- String path=ServletActionContext.getServletContext().getRealPath(inputPath);
- //创建输入流实现文件的下载读取
- return new BufferedInputStream(new FileInputStream(path+"\\"+fileName));
- }
- public void setInputStream(InputStream inputStream) {
- this.inputStream = inputStream;
- }
- public String getContentType() {
- return contentType;
- }
- public void setContentType(String contentType) {
- this.contentType = contentType;
- }
- }
FileDownAction.java
2、编辑src下的struts.xml文件(添加文件下载的action的内容)
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "struts-2.1.7.dtd" >
- <struts>
- <!-- 中文乱码处理 -->
- <constant name="struts.i18n.encoding" value="UTF-8"/>
- <!-- 设置开发模式 -->
- <constant name="struts.devMode" value="true"/>
- <!-- 设置上传文件的大小 -->
- <constant name="struts.multipart.maxSize" value="200000000"/>
- <package name="default" namespace="/" extends="struts-default">
- <!-- 文件上传 -->
- <action name="*" class="com.action.{1}Action" method="execute">
- <result>/success.jsp</result>
- <result name="input">/error.jsp</result>
- <!-- 引用默认拦截器栈 -->
- <interceptor-ref name="defaultStack">
- <!-- 配置上传的大小,这里配置的是上传文件的单个大小 -->
- <param name="fileUpload.maximumSize">20971520</param>
- <!-- 配置文件上传允许的类型 -->
- <!-- 图片:image/pjpeg,image/jpeg,image/gif,image/png,image/bmp -->
- <!-- 文本文件:text/plain -->
- <!-- HTML网页:text/html -->
- <!-- 可执行文件:application/octet-stream -->
- <!-- PPT:Application/vnd.ms-powerpoint -->
- <!-- Excel:Application/vnd.ms-excel -->
- <!-- Word:application/msword -->
- <param name="fileUpload.allowedTypes">text/plain,application/msword</param>
- <!-- 配置文件的扩展名 -->
- <param name="fileUpload.allowedExtensions">.txt,.doc</param>
- </interceptor-ref>
- </action>
- <!-- 文件下载 -->
- <action name="download" class="com.action.FileDownAction" method="execute">
- <!-- 配置action中使用的参数-->
- <param name="inputPath">/upload</param>
- <result name="success" type="stream">
- <!--设置浏览器的文件类型 -->
- <param name="contentType">application/octet-stream</param>
- <!-- 输入流,读取 -->
- <param name="inputStream">inputStream</param>
- <!--设置http响应的头 -->
- <param name="contentDisposition">attachment;filename="${fileName}"</param>
- <!-- 设置缓冲区大小 -->
- <param name="bufferSize">4096</param>
- </result>
- </action>
- </package>
- </struts>
struts.xml
3、在WebRoot下创建down.jsp页面
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%@ taglib uri= "/struts-tags" prefix="s" %>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>文件下载</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <a href="download.action?fileName=20140914.txt">点击此处下载20140914.txt文档</a>
- </body>
- </html>
down.jsp
4、运行
7、Struts2实现文件上传和下载的更多相关文章
- struts2实现文件上传和下载
在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...
- Struts2的文件上传与下载
<一>简述: Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUp ...
- 【Struts2】文件上传与下载
一.上传 1.1 Struts2实现步骤 浏览器端 服务器端 1.2 关于Struts2中文件上传细节: 1.3 示例 jsp文件 Action类 struts.xml文件配置 二.下载 2.1 文件 ...
- (十五)struts2的文件上传和下载
文件上传的原理 我们以前学习上传的时候知道需要将表单的enctype属性设置为multipart/form-data. 表单的enctype属性指定的是表单数据的编码方式,有三个值: -applica ...
- Struts2之文件上传与下载
时间:2017-1-11 15:47 --使用commons-fileupload组件上传1.客户端 * method="post" * <input t ...
- 11、Struts2 的文件上传和下载
文件上传 表单准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置 ...
- Struts2入门(七)——Struts2的文件上传和下载
一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST" ...
- Struts2 实现文件上传和下载
实现上传功能 Struts2实际上是使用的commons fileupload 组件,所以记得导包哦. 1.首先你应该有一个上传页面 <!-- file的name属性与action中的File类 ...
- struts2(六) 文件上传和下载
前面对文件下载提过一点点,这里正好要讲文件上传,就放在一起在说一遍. --WH 一.单文件上传 在没学struts2之前,我们要写文件上传,非常麻烦,需要手动一步步去获取表单中的各种属性,然后在进行相 ...
随机推荐
- MFC中CListCtrl说明
转载:http://blog.csdn.NET/lhy2199/article/details/5177032 listctrl默认view 风格为report CListCtrl类封装"列 ...
- lua中的面向对象编程
简单说说Lua中的面向对象 Lua中的table就是一种对象,看以下一段简单的代码: 上述代码会输出tb1 ~= tb2.说明两个具有相同值得对象是两个不同的对象,同时在Lua中table是引用类型的 ...
- android studio依赖库工程Activity显示问题及库工程设置
android studio引用库工程其实不难,直接添加依赖module即可,但是我在操作过程中出现一些奇怪的问题,苦扰我一整天,为了祭奠这苦命的一天特别mark一下. 首先描述一下我的错误现象: s ...
- Tiny6410之NAND FLASH驱动
一.NAND FLASH的特点 S3C6410的NAND FLASH控制器有如下特点 1.自导入模式:复位后,引导代码被送入到8KB的STEPPINGSTONE中,引导代码移动完毕,引导代码将在STE ...
- Android studio自动删除没用的资源
有时候我们添加的一些资源,如图片和一些没用的代码,以及在添加第三方库的时候我们只需要使用其中的一部分功能和一部分资源,那么这个时候如果靠我们手工去怕是非常难做的,尤其是项目大的时候,Android 团 ...
- C++第二天
今天学会了反码和补码: 1.正数的反码是本身,负数的反码是高位不变,其余位取反(这里的数是指二进制数) 2.补码是反码加一得到的 对于数据类型分为基本类型:整型,浮点型,字符型和布尔值类型,还有飞基本 ...
- IIS 和 各个协议
1,IIS是Internet information service是internet信息服务的简写,它支持三大服务器,WWW,FTP,SMTP(简单Mail传输协议): 2,NNTP(网络新闻传输协 ...
- 解决 bootstrap 在IE8下的兼容问题
<meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="v ...
- .Net中jQuery.ajax()调用asp.net后台方法 总结
利用JQuery的$.ajax()调用.Net后台方法有多种方式, 不多说了 直接上代码 前台代码 <script type="text/javascript"> $ ...
- JS:JSP Servlet
Servlet 是在服务器上运行的小程序.这个词是在 Java applet的环境中创造的,Java applet 是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果得到为用户进行 ...