struts2单文件和多文件的上传
2016-04-06 19:46
357 查看
在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就单文件上传和多文件上传的源代码进行一下讲解,这里需要导入文件下载上传的两个jar文件,一个是commons-fileupload-1.2.2.jar,另一个是commons-io-2.0.1.jar
struts2单文件上传:
首先是一个jsp文件上传页面,这个比较简单,就是一个表单,里面有个文件上传框
结果显示页面:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML>
<html>
<head>
<title></title>
</head>
<body>
username:<s:property value="username"/><br>
name:<s:property value="fileFileName"/>
<br>
type:<s:property value="fileContentType"/>
</body>
</html>
首先我们要清楚一点,这里的file并不是真正指代jsp上传过来的文件,当文件上传过来时,struts2首先会寻找struts.multipart.saveDir(这个是在default.properties里面有)这个name所指定的存放位置。
struts2在进行文件上传操作时,实际是通过两个步骤实现的:
1. 首先将客户端传上来的文件保存在struts.multipart.saveDir键所指定的目录中,如果该键所对应的目录不存在的话,那么就保存到javax.servlet.context.tempdir环境变量所指定的目录中;
2.Action中所定义的File类型的成员变量file实际指向的是临时目录中的临时文件,然后在服务器端通过IO方式将临时文件写入到指定的服务器端目录中。
struts2多文件上传:
首先,表单:
<form action="fileUpload2.action" method="post" enctype="multipart/form-data">
username: <input type="text" name="username"><br>
file: <input type="file" name="file"><br>
file2: <input type="file" name="file"><br>
file3: <input type="file" name="file"><br>
<input type="submit" value="submit">
</form>然后是处理的UploadAction2:
package com.shengsiyuan.struts2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction2 extends ActionSupport
{
private String username;
private List<File> file;
private List<String> fileFileName;
private List<String> fileContentType;
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public List<File> getFile()
{
return file;
}
public void setFile(List<File> file)
{
this.file = file;
}
public List<String> getFileFileName()
{
return fileFileName;
}
public void setFileFileName(List<String> fileFileName)
{
this.fileFileName = fileFileName;
}
public List<String> getFileContentType()
{
return fileContentType;
}
public void setFileContentType(List<String> fileContentType)
{
this.fileContentType = fileContentType;
}
@Override
public String execute() throws Exception
{
for(int i = 0; i < file.size(); i++)
{
InputStream is = new FileInputStream(file.get(i));
String root = ServletActionContext.getRequest().getRealPath("/upload");
File destFile = new File(root, fileFileName.get(i));
OutputStream os = new FileOutputStream(destFile);
byte[] buffer = new byte[400];
int length = 0;
while(-1 != (length = is.read(buffer)))
{
os.write(buffer, 0, length);
}
is.close();
os.close();
}
return SUCCESS;
}
}
最后是结果显示页面:
username: <s:property value="username"/><br>
<s:iterator value="fileFileName" id="f">
file: <s:property value="#f.toUpperCase()"/><br>
</s:iterator>注:上面代码中的#是OGNL:对象图导航语言。
struts2单文件上传:
首先是一个jsp文件上传页面,这个比较简单,就是一个表单,里面有个文件上传框
<form action="fileUpload.action" method="post" enctype="multipart/form-data"> username:<input type="text" name="username"><br> file:<input type="file" name="file"><br> <input type="submit" value="submit"> </form>接下来是UploadAction部分代码,因为struts2对上传和下载都提供了很好的实习机制,所以在action这段我们只需要写很少的代码就行:
package com.shengsiyuan.struts2; import java.io.*; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { private String username; private File file; private String fileFileName; //上传的文件名 private String fileContentType; //上传的文件类型 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public File getFile() { return file; } public void setFile(File file) { this.file = file; } public String getFileFileName() { return fileFileName; } public void setFileFileName(String fileFileName) { this.fileFileName = fileFileName; } public String getFileContentType() { return fileContentType; } public void setFileContentType(String fileContentType) { this.fileContentType = fileContentType; } @Override public String execute() throws Exception { String root = ServletActionContext.getRequest().getRealPath("/upload"); InputStream is = new FileInputStream(file); System.out.println("path: " + file.getAbsolutePath()); System.out.println("file: " + file.getName()); System.out.println("fileFileName: " + fileFileName); File destFile = new File(root, fileFileName); OutputStream os = new FileOutputStream(destFile); byte[] buffer = new byte[400]; int length = 0; while(-1 != (length = is.read(buffer))) { os.write(buffer, 0, length); Thread.sleep(1000); } is.close(); os.close(); return SUCCESS; } }
结果显示页面:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML>
<html>
<head>
<title></title>
</head>
<body>
username:<s:property value="username"/><br>
name:<s:property value="fileFileName"/>
<br>
type:<s:property value="fileContentType"/>
</body>
</html>
首先我们要清楚一点,这里的file并不是真正指代jsp上传过来的文件,当文件上传过来时,struts2首先会寻找struts.multipart.saveDir(这个是在default.properties里面有)这个name所指定的存放位置。
struts2在进行文件上传操作时,实际是通过两个步骤实现的:
1. 首先将客户端传上来的文件保存在struts.multipart.saveDir键所指定的目录中,如果该键所对应的目录不存在的话,那么就保存到javax.servlet.context.tempdir环境变量所指定的目录中;
2.Action中所定义的File类型的成员变量file实际指向的是临时目录中的临时文件,然后在服务器端通过IO方式将临时文件写入到指定的服务器端目录中。
struts2多文件上传:
首先,表单:
<form action="fileUpload2.action" method="post" enctype="multipart/form-data">
username: <input type="text" name="username"><br>
file: <input type="file" name="file"><br>
file2: <input type="file" name="file"><br>
file3: <input type="file" name="file"><br>
<input type="submit" value="submit">
</form>然后是处理的UploadAction2:
package com.shengsiyuan.struts2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction2 extends ActionSupport
{
private String username;
private List<File> file;
private List<String> fileFileName;
private List<String> fileContentType;
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public List<File> getFile()
{
return file;
}
public void setFile(List<File> file)
{
this.file = file;
}
public List<String> getFileFileName()
{
return fileFileName;
}
public void setFileFileName(List<String> fileFileName)
{
this.fileFileName = fileFileName;
}
public List<String> getFileContentType()
{
return fileContentType;
}
public void setFileContentType(List<String> fileContentType)
{
this.fileContentType = fileContentType;
}
@Override
public String execute() throws Exception
{
for(int i = 0; i < file.size(); i++)
{
InputStream is = new FileInputStream(file.get(i));
String root = ServletActionContext.getRequest().getRealPath("/upload");
File destFile = new File(root, fileFileName.get(i));
OutputStream os = new FileOutputStream(destFile);
byte[] buffer = new byte[400];
int length = 0;
while(-1 != (length = is.read(buffer)))
{
os.write(buffer, 0, length);
}
is.close();
os.close();
}
return SUCCESS;
}
}
最后是结果显示页面:
username: <s:property value="username"/><br>
<s:iterator value="fileFileName" id="f">
file: <s:property value="#f.toUpperCase()"/><br>
</s:iterator>注:上面代码中的#是OGNL:对象图导航语言。
相关文章推荐
- Java String 转 long
- Java String 转 long
- Java学习·final
- 面向对象编程学习一点感悟(java)
- java学习第七天
- 20160406javaweb JDBC 实例工具类
- 【Java】分析JAVA应用CPU占用过高的问题
- Swagger与SpringMVC项目整合
- 使用三大框架发送邮件,初始化bean时报java.lang.NoClassDefFoundError: javax/mail/MessagingException
- 20160405javaweb之jdbc
- Java位操作全面总结
- JAVA基础--IO流
- LeetCode 100 -Same Tree ( JAVA )
- struts2笔记12-声明式异常
- 根据集合中 某两个属性 进行集合排序
- jboss-as-7.1.1.Final:(四)Eclipse集成下的自动发布和JSP的热加载
- springMVC中bean容器:bean.xml的配置
- java并发编程(一)-线程池
- 使用maven创建项目和cannot change version web module 3.0
- 使用struts2实现上传下载功能(附代码)。类似于ftp服务器。不止局限于本机的上传下载,其他机器也可使用此功能,服务器似的功能