struts 文件上传下载
上传
1、编写上传action类 UploadAction.java
package jxf.b_upload; import java.io.File;
import java.io.IOException; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext; public class UploadAction {
public File file01;//上传的文件 --对应表单中的<input type="file" name="file01"> name的值
public String file01FileName;//上传文件的文件名 --表单中name的值+FileName
public String file01ContentType;// 上传文件的文件的类型(MIME) --表单中name的值+ContentType public void setFile01(File file01) {
this.file01 = file01;
} public void setFile01FileName(String file01FileName) {
this.file01FileName = file01FileName;
} public void setFileContentType(String file01ContentType) {
this.file01ContentType = file01ContentType;
} /**
* 上传
* @return
*/
public String upload() {
//处理文件 把文件上传到upload目录
try {
//创建目标文件
File destFile = new File(ServletActionContext.getServletContext().getRealPath("/upload"),file01FileName);
//拷贝上传的文件到目标文件
FileUtils.copyFile(file01, destFile);
System.out.println("上传完成");
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return "success";
}
}
2、配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- struts默认的上传文件大小限制是2M,可通过常量的配置来改变 -->
<constant name="struts.multipart.maxSize" value="10485760"></constant>
<package name="upload_" extends="struts-default">
<action name="uploadTest" class="jxf.b_upload.UploadAction" method="upload">
<!-- 限制运行上传的文件的类型 -->
<interceptor-ref name="defaultStack">
<!-- 限制运行的文件的扩展名
<param name="fileUpload.allowedExtensions">txt,jpg,jar</param>
-->
<!-- 限制运行的类型 【与上面同时使用,取交集】
<param name="fileUpload.allowedTypes">text/plain</param>
-->
</interceptor-ref>
<!-- 错误视图 -->
<result name="input">/error.jsp</result>
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
3、前台jsp页面
<body>
<form action="${pageContext.request.contextPath}/uploadTest" method="post" enctype="multipart/form-data">
<input type="file" name="file01">
<input type="submit" value="上传">
</form>
</body>
如果是多文件上传,可以使用同名的<input type="file" name="">标签,并在action处理类中用数组接收(当然也可以用不同的name值,并用对应的字段接收),然后遍历处理
public class UploadAction {
public File[] file01;//上传的文件 --对应表单中的<input type="file" name="file01"> name的值
public String[] file01FileName;//上传文件的文件名 --表单中name的值+FileName
public String[] file01ContentType;// 上传文件的文件的类型(MIME) --表单中name的值+ContentType public void setFile01(File[] file01) {
this.file01 = file01;
} public void setFile01FileName(String[] file01FileName) {
this.file01FileName = file01FileName;
} public void setFileContentType(String[] file01ContentType) {
this.file01ContentType = file01ContentType;
} /**
* 上传
* @return
*/
public String upload() {
//处理文件 把文件上传到upload目录
try {
//创建目标文件
for (int i = 0; i < file01.length; i++) {
File destFile = new File(ServletActionContext.getServletContext().getRealPath("/upload"),file01FileName[i]);
//拷贝上传的文件到目标文件
FileUtils.copyFile(file01[i], destFile);
System.out.println("上传完成");
} } catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return "success";
}
}
<form action="${pageContext.request.contextPath}/uploadTest" method="post" enctype="multipart/form-data">
<input type="file" name="file01">
<input type="file" name="file01">
<input type="file" name="file01">
<input type="submit" value="上传">
</form>
下载:
1、编写下载acton类 DownAction.java
package jxf.b_upload; import java.io.File;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; public class DownAction { /**
* 1. 显示所有要下载文件的列表
* @return
*/
public String list(){
//获取所有要下载的文件
File file = new File(ServletActionContext.getServletContext().getRealPath("/upload"));
String[] fileNames = file.list();//所有文件名
ActionContext ac = ActionContext.getContext();
Map<String,Object> request = ac.getContextMap();
request.put("fileNames", fileNames);//将文件名放入request
return "list";
} /*************2. 文件下载*********************/
// 1. 获取要下载的文件的文件名
private String fileName;//对应提交的参数名
public void setFileName(String fileName) {
// 处理传入的参数中问题(get提交)
try {
fileName = new String(fileName.getBytes("ISO8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
// 把处理好的文件名,赋值
this.fileName = fileName;
} //2. 下载提交的业务方法 (在struts.xml中配置返回stream)
public String down() throws Exception {
return "success";
} // 3. 返回文件流的方法
public InputStream getAttrInputStream(){
return ServletActionContext.getServletContext().getResourceAsStream("/upload/" + fileName);
} // 4. 下载显示的文件名(浏览器显示的文件名)
public String getDownFileName() {
// 需要进行中文编码
try {
fileName = URLEncoder.encode(fileName, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return fileName;
} }
2、配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="down_" extends="struts-default">
<action name="downlist" class="jxf.b_upload.DownAction" method="list">
<result name="list">/down.jsp</result>
</action>
<action name="down_down" class="jxf.b_upload.DownAction" method="down">
<result name="success" type="stream">
<!-- 运行下载的文件的类型:指定为所有的二进制文件类型 -->
<param name="contentType">application/octet-stream</param>
<!-- 对应的是Action中属性: 返回流的属性【其实就是getAttrInputStream()】 -->
<param name="inputName">attrInputStream</param>
<!-- 下载头,包括:浏览器显示的文件名 ${downFileName},${}为struts中的取值符,downFileName对应getDownFileName()-->
<param name="contentDisposition">attachment;filename=${downFileName}</param>
<!-- 缓冲区大小设置 -->
<param name="bufferSize">1024</param>
</result>
</action>
</package>
</struts>
3、下载列表jsp
<body>
<table border="1" align="center">
<tr>
<td>序号</td>
<td>文件名</td>
<td>操作</td>
</tr>
<c:forEach var="item" items="${fileNames}" varStatus="sta">
<tr>
<td>${sta.count}</td>
<td>${item}</td>
<td>
<c:url var="url" value="down_down">
<c:param name="fileName" value="${item}"></c:param>
</c:url>
<a href="${url}">下载</a>
</td>
</tr>
</c:forEach>
</table>
</body>
下载编写方式比较特殊,并不容易记忆,此处记录方便以后用到查阅。
struts 文件上传下载的更多相关文章
- Struts文件上传下载
Struts配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PU ...
- 【Struts 文件上传下载】
RegisterAction package k.action; import k.domain.User; import k.form.UserForm; import k.service.User ...
- Struts的文件上传下载
Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...
- ssh框架文件上传下载
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JavaWeb实现文件上传下载功能实例解析
转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...
- JAVA Web 之 struts2文件上传下载演示(二)(转)
JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...
- JAVA Web 之 struts2文件上传下载演示(一)(转)
JAVA Web 之 struts2文件上传下载演示(一) 一.文件上传演示 1.需要的jar包 大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/ ...
- 2013第38周日Java文件上传下载收集思考
2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...
- Struts2 控制文件上传下载
之前介绍servlet3.0新特性的时候有提到过servlet API提供了一个part类来实现对文件的上传和保存,Struts其实是在其基础上做了进一步的封装,更加简单易用.至于文件下载,Strut ...
随机推荐
- 用Quartus II 建立一个工程模板,以后新建工程时无需再配置参数
以前用Quartus II 每次新建工程时,都要设置工程名,选择工程路径,选择芯片型号等等,好麻烦呀!可不可以建一个工程模板,以后新建工程时直接改相应文件名就可以呀!后来我一琢磨,感觉也不是不可以.因 ...
- 如何用jQuery实现在鼠标滚动后导航栏保持固定
要实现如下效果,鼠标滚动后,上方导航栏置顶固定 关键html代码: <div class="header-bottom"> <div class="co ...
- 使用innobackupex备份mysql数据库
1 因为使用perl脚本编写,安装前应先安装 yum install perl-Time-HiRes -y yum -y install perl-DBD-MySQL.x86_64 一起安装 ...
- [Javascript] Implement zip function
1. Use a for loop to traverse the videos and bookmarks array at the same time. For each video and bo ...
- Solr学习笔记-在Tomcat上部署执行Solr
上一篇我们初识了Solr而且学习了Jetty的启动方式.查看了Solr的管理界面,这一篇我们来实如今Tomcat上部署执行Solr. 部署环境: window7 jdk1.6.0_14 Solr-4. ...
- CCLabelAtlas创建自定义字体
有时候游戏中要用到一些特殊的字体效果,特别是数字. CCLabelAtlas就可以从png图中读取文字. CCLabelAtlas* diceCount=CCLabelAtlas::labelWith ...
- bash shell for循环1到100 .
前言 用bash shell写程序时,经常会用到for循环,特别是从1到100这种需求,这里记录几种shell中从1到100的循环方法 方法 类c语言 for ((i=1; i<=100; ...
- asp.net分页控件库
AspNetPager分页控件 AspNetPager分页控件解决了分页中的很多问题,直接采用该控件进行分页处理,会将繁琐的分页工作变得简单化,下面是我如何使用AspNetPager控件进行分页处理的 ...
- iOS之CAKeyframeAnimation关键帧动画详解
CABasicAnimation算是CAKeyFrameAnimation的 特殊情况,即不考虑中间变换过程,只考虑起始点与目标点就可以了.而CAKeyFrameAnimation则更复杂一些,允许我 ...
- 购物车非cookie版
2015.11.26购物车,非cookie版 [点击来,你发现被骗了(笑哭,笑哭,笑哭,源代码的话,留下邮箱吧,是在不好找这一时半会儿的.)] Jsp通过反射机制获取bean中的标签,但其实,可以没有 ...