上传

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>

下载编写方式比较特殊,并不容易记忆,此处记录方便以后用到查阅。

最新文章

  1. register_chrdev_region/alloc_chrdev_region和cdev注册字符设备驱动
  2. css压缩(一)
  3. C# WebBrowser NativeMethods
  4. Kinetic使用注意点--image
  5. Centos安装成功mysql-5.5.37
  6. Tengine简单安装
  7. 一个web初学者的笔记总结
  8. CentOS6.5 搭建基础PHP环境(yum安装)
  9. Html+Css实现九大行星动画效果
  10. Selenium-Grid工作方式
  11. php模式设计之 中介者模式
  12. websocket-php
  13. 微信小程序基础之试图控件View、ScrollView、Swiper
  14. Linux0.11 创建进程的过程分析--fork函数的使用
  15. 蓝桥杯c/c++省赛真题——日志统计
  16. 桥接模式和nat模式的区别
  17. zookeeper-操作与应用场景-《每日五分钟搞定大数据》
  18. centos中less翻页查询的用法
  19. JDK 自带的观察者模式源码分析以及和自定义实现的取舍
  20. 关于 ul 嵌套 li 并且再嵌套 a 的 BUG

热门文章

  1. Android Studio 导入项目错误
  2. iOS不勾选设置,实现某个界面强制横屏
  3. cmd 里面运行git提示“不是内部或外部命令,也不是可运行的程序”的解决办法
  4. C#- FTP递归下载文件
  5. java中通过反射获取方法并且调用(getMethod和invoke深入)实践
  6. 【02】尽量以const,enum,inline替换#define
  7. linux下lighttpdserver的具体安装步骤 以及对flv流媒体的支持配置
  8. LINUX系统镜像下载总汇
  9. Linux select TCP并发服务器与客户端编程
  10. Android 接收短信