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 ...
随机推荐
- HW3.11
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- Java和.NET的GZIP压缩功能对比
本文主要比较了Java和.NET提供的GZIP压缩功能. 介绍 在本文中,我们将讨论Java和.NET提供的GZIP压缩功能,并且用实例来说明哪个压缩方法更佳. 在Java中,我们有提供GZIP压缩的 ...
- 高并发Web服务的演变:节约系统内存和CPU
一.越来越多的并发连接数 现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战.以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置.虽然现 ...
- 如何查看tomcat是32位还是64位
原文地址:http://www.cnblogs.com/andysd/p/3940976.html
- 特殊的反转单链表算法(C++)
普通的单链表反转算法 大学的时候也做过好几次单链表的反转,记得当时都是用三个变量不断修改next的值然后实现反转. ListNode* reverseList(ListNode* head) { Li ...
- 【三支火把】---队列和栈的C程序实现
这几天总结了C语言的队列,栈的实现方法,在此总结一下:一.栈 首先从栈开始,诚然,相信学习过数据结构的你,肯定应该知道栈是什么东西了,如果不知道也没事每一句话我就可以帮你总结--数据只在栈顶进行插入和 ...
- Android获取ip地址
原文:http://www.cnblogs.com/android100/p/Android-get-ip.html 1.使用WIFI 首先设置用户权限 <uses-permission and ...
- CAS认证(2):认证过程
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- SYNONYMS
SQL> SELECT * FROM V$VERSION WHERE ROWNUM=1; BANNER --------------------------------------------- ...
- 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA
1.Java的安全体系架构 1.1 Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.sec ...