上传

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 文件上传下载的更多相关文章

  1. Struts文件上传下载

    Struts配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PU ...

  2. 【Struts 文件上传下载】

    RegisterAction package k.action; import k.domain.User; import k.form.UserForm; import k.service.User ...

  3. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...

  4. ssh框架文件上传下载

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. JavaWeb实现文件上传下载功能实例解析

    转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...

  6. JAVA Web 之 struts2文件上传下载演示(二)(转)

    JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...

  7. JAVA Web 之 struts2文件上传下载演示(一)(转)

    JAVA Web 之 struts2文件上传下载演示(一) 一.文件上传演示 1.需要的jar包 大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/ ...

  8. 2013第38周日Java文件上传下载收集思考

    2013第38周日Java文件上传&下载收集思考 感觉文件上传及下载操作很常用,之前简单搜集过一些东西,没有及时学习总结,现在基本没啥印象了,今天就再次学习下,记录下自己目前知识背景下对该类问 ...

  9. Struts2 控制文件上传下载

    之前介绍servlet3.0新特性的时候有提到过servlet API提供了一个part类来实现对文件的上传和保存,Struts其实是在其基础上做了进一步的封装,更加简单易用.至于文件下载,Strut ...

随机推荐

  1. grep环境变量常用配置

    vim ~/.bashrc GREP_OPTIONS="-irns --exclude-dir=output --exclude=tags --exclude=*.files" 然 ...

  2. centos "cannot open display"的问题

    实用技巧:在Linux下设置xhost方法步骤 第一步:用root登陆linux,启动vnc服务: 第二步:根据vnc起来的端口,设置export DISPLAY=localhost:1(1表示vnc ...

  3. C#定义类成员

    1.成员定义 public--成员可以由任何代码访问. private--成员只能由类中的代码访问(如果没有使用任何关键字,就默认使用这个关键字). internal--成员只能由定义它的程序集(项目 ...

  4. 小波变换和motion信号处理(三)(转)

    这篇文章算太监了,去作者blog提问去吧:http://www.kunli.info/2012/04/08/fourier-wavelet-motion-signal-3/ 从前两篇发布到现在,过去一 ...

  5. HDU3466-Proud Merchants(01背包变形)

    需要排序的01背包. 这种题排序时只需要考虑两个怎么排,重载小于号就可以了. 需要注意的是,如果一个物品你想先放进背包里,那么你排序是要放到后面!01背包的放置顺序的倒着的! 看到别人的博客都只是比较 ...

  6. linux定时运行命令脚本——crontab

    cron和crontab定时任务: http://blog.csdn.net/ithomer/article/details/6817019 http://blog.sina.com.cn/s/blo ...

  7. tomcat热部署,更改java类不用重新加载context

    修改类后,tomcat热部署会重新加载整个项目的context,影响开发效率.网上查的大多数是将server的modules标签中Auto Reload项改为Disabled,但是没有效果. 使用以下 ...

  8. Chrome 插件vimium快捷键大全

    vimium是一款让你在chrome浏览器能方便地使用键盘操作浏览器的插件. 转自:http://www.cnblogs.com/liuyangnuts/p/3474905.html 在当前页中导航 ...

  9. android中ListView点击和里边按钮点击不能同时生效问题解决

    今天遇到一个问题:android中ListView点击和里边button点击不能同时生效问题解决. 原因是: listView 在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得 ...

  10. 【剑指offer】包括min函数的栈

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26064213 剑指offer上的第21题,之前在Cracking the Coding i ...