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之前,我们要写文件上传,非常麻烦,需要手动一步步去获取表单中的各种属性,然后在进行相 ...
随机推荐
- eclipse中svn提交过滤不需要的文件
eclipse>Preference>Team>Ignored Resource 添加 .settings .classpath .project
- 开通域名绑定DDNS
一.初衷 我想要有一个自己的域名,然后有自己的server,在server上搭一个网站或者开通一个ftp服务,我想通过这个域名来访问它. 二.什么是DDNS DDNS 动态dns,电信宽带采用拨号联网 ...
- CoreJavaE10V1P3.8 第3章 Java的基本编程结构-3.8 控制流程(Control Flow)
通过使用条件语句.循环语句可以实现流程的控制. 3.8.1 块作用域(Block Scope) 块(Block)就是由一对花括号包围起来的部分.他指定了一个变量的生存范围,与一个方法的操作范围. Ja ...
- schemes-universalLink-share_IOS-android-WeChat-chunleiDemo
schemes-universalLink-share_IOS-android-WeChat-chunleiDemo The mobile terminal share page start APP ...
- DrawerLayout,ToolBar 和 TabHost 的使用
ActionBar 定义起来不方便 toolbar: 最重要的特性,显示menu菜单,右上角三个点的菜单按钮,使用灵活 使用:1,布局文件,包裹LinearLayout 放imageView, 或者I ...
- 【XML】document.createEvent的使用方法
<aclass="comment-mod"onclick="alert('ss')"href="#">评论</a> ...
- 利用rabbit_mq队列消息实现对一组主机进行命令下发
目的: 利用rabbit_mq队列消息实现对一组主机进行命令下发 server: #!/usr/bin/env python3.5 # -*- coding:utf8 -*- import os,sy ...
- cmd 进入mysql
从cmd中进入MySQL的命令界面 1.开始中找出运行:输入cmd2.查找appserv所在盘,我的在D盘,所以接着输入:d:3.在d盘中查找mysql所在目录:cd appserv\mysql\bi ...
- centos redis 安装
# wget http://download.redis.io/releases/redis-2.8.6.tar.gz # tar xzf redis-2.8.6.tar.gz # cd redis- ...
- win7安装omnetpp-4.6
最近做毕设要用omnet仿真系统,就试着在win7上装了一下,分享一下经验咯.因为lz经常刷机,所以安装过程都是从头再来的,费话不多说.下面是安装过程: (1) 安装jdk,我就百度一下,然后找 ...