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 ...
随机推荐
- HNU13377:Book Club 二分图
题意:有n个人,m种需求,给出m行,每行a,b代表a想要的书在b那里,问能不能通过交换的方法来满足每个人的需求 思路:要符合题意的话一定是二分图.网上还一种dfs #include<cstdio ...
- Com 笔记 -可连接对象
首先 两个概念: 1.入接口 :源对象提供给客户调用的. 2.出接口 :源对象通过此接口可直接或间接调用客户.类似delegate 对于实现了出接口的对象称为可连接对象. 对应每一个出接口,可连接对象 ...
- POJ2299: Ultra-QuickSort-合并排序解决逆序数问题
#include<iostream> #include<malloc.h> using namespace std; long long ans; void merge(int ...
- Eclipse的下载、安装和WordCount的初步使用(本地模式和集群模式)
包括: Eclipse的下载 Eclipse的安装 Eclipse的使用 本地模式或集群模式 Scala IDE for Eclipse的下载.安装和WordCount的初步使用(本地模式和集群 ...
- Android完美解决输入框EditText隐藏密码打勾显示密码问题
长话短说,一共有两种方法.首先你需要在布局文件里面给EditText设置一个android:inputType="numberPassword"属性.我这里默认规定密码只能是数字了 ...
- myBatis性能优化【转】
官方doc文档 http://www.mybatis.org/mybatis-3/configuration.html#settings 最近测试发现个myBatis 有个比较严重的性能问题, 描述如 ...
- IIS7错误:“Web服务器被配置为不列出此目录的内容”的解决办法
IIS7错误:“Web服务器被配置为不列出此目录的内容”的解决方法: 在"操作"下,点启用,此按钮将变成禁用,则可消除此错误
- 容器大小的改变以及容器操作可能使迭代器失效、vector对象的容量变化
1 改变容器的大小 我们可以使用resize来增加或缩小容器,与往常一样,array不支持resize.如果当前大小大于所要求的大小,容器后面的元素会被删除:如果当前大小小于新大小,会将新元素添加到容 ...
- Linux curl命令参数详解--转载
linux curl是通过url语法在命令行下上传或下载文件的工具软件,它支持http,https,ftp,ftps,telnet等多种协议,常被用来抓取网页和监控Web服务器状态. 一.Linux ...
- leecode 每日解题思路 102-Binary Tree Level Order Traversal
題目描述: 题目链接: 102-Binary Tree Level Order Traversal 这个问题要解决的是如何逐层遍历一个二叉树,并把同一层元素放入同一list中, 再将所有元素返回. 其 ...