struts2的单个文件上传

本文主要两种方式,一:通过 FileUtils.copyFile(file, savefile);方法复制;二:通过字节流方式复制
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- struts2 framework -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter> <filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter> <filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>*.do</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping> <filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml" />
<!--方法一 -->
<package name="uploadFile" extends="struts-default">
<action name="upload" class="com.nn.upload.UploadAction" method="upload">
<result name="success">/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
<!--方法二 -->
<package name="uploadFile2" extends="struts-default">
<action name="upload2" class="com.nn.upload.UploadAction" method="uploadByStream">
<param name="allowTypes">.bmp,.png,.gif,.jpeg,.jpg</param>
<param name="savePath">/upload</param> <!-- 保存的真实路径 -->
<result name="success">/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
</struts>
struts.properties
struts.multipart.parser=jakarta
struts.multipart.saveDir=/temp
struts.multipart.maxSize=
struts.i18n.encoding=utf-
struts.locale=zh_CN
struts.action.extension=do
struts.custom.i18n.resources=globalMsg
UploadAction.java 主要代码
public class UploadAction extends ActionSupport {
private File file;
private String fileName;
private String fileType;
// 第二种方法中接受依赖注入的属性
private String savePath;
private String allowTypes;
/**
* 第一种方法,使用FileUtils从temp中复制到相关路径下面,结束后temp中的文件自动被清楚
* @return
*/
public String upload() {
String realpath = ServletActionContext.getServletContext().getRealPath("/upload");
if (file != null) {
String name = this.getFileName().substring();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
this.setFileName(df.format(new Date())+name); //文件名字+日期
File savefile = new File(new File(realpath), this.getFileName());
if (!savefile.getParentFile().exists())
savefile.getParentFile().mkdirs();
try {
FileUtils.copyFile(file, savefile);
} catch (IOException e) {
e.printStackTrace();
}
ActionContext.getContext().put("message", "文件上传成功!");
}
return "success";
}
/**
* 第二站方式,通过字节流来复制
* @return
*/
public String uploadByStream(){
// 判断是否允许上传
String filterResult = findFileType(this.getAllowTypes().split(","));
if (filterResult != null) {
ActionContext.getContext().put("typeError","您要上传的文件类型不正确");
return filterResult;
}
// 以服务器的文件保存地址和原文件名建立上传文件输出流
FileOutputStream fos;
FileInputStream fis;
String realpath = ServletActionContext.getServletContext().getRealPath(this.getSavePath());
try {
String name = this.getFileName().substring();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
this.setFileName(df.format(new Date())+name); //文件名字+日期
realpath = realpath +"\\"+this.getFileName();
fos = new FileOutputStream(realpath);
fis = new FileInputStream(this.getFile());
byte[] buffer = new byte[];
int len = ;
while ((len = fis.read(buffer)) > ) {
fos.write(buffer, , len);
}
fos.close();
fis.close();
return SUCCESS;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return INPUT;
}
public String findFileType(String[] types) {
String fileType = this.getFileType();
for (String type : types) {
if (type.equals(fileType)) {
return null;
}
}
return INPUT;
}
//省略get set 方法
}
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript">
function check(){
var file = document.getElementById("file");
if(file != null){
var fileType = file.value.substr(file.value.lastIndexOf(".")).toLowerCase(); //截取类型,如.jpg
var fileName = file.value.substr(file.value.lastIndexOf("\\")); //截取文件名字,如:/01.png
document.getElementById("fileName").value = fileName;
document.getElementById("fileType").value = fileType;
return true;
}
alert("请选择文件");
return false;
}
</script>
</head> <body>
<p>stuts 文件上传实例 </p>
${requestScope.typeError}
<!-- 第一种方式上传链接:
<form action="/upload.do" method="post" enctype="multipart/form-data" onsubmit="return check();">
-->
<form action="/upload2.do" method="post" enctype="multipart/form-data" onsubmit="return check();">
上传文件:<input type="file" name="file" /><input type="submit" value="上传"/>
<input type="hidden" name="fileType" id="fileType"/>
<input type="hidden" name="fileName" id="fileName"/>
</form> </body>
</html>
success.jsp
<body>
${requestScope.message}<br>
文件名称:<input type="text" value="<s:property value="fileName"/>"/><br>
文件为:<img src="${pageContext.request.contextPath}/<s:property value="'upload/'+fileName"/>"><br>
<s:debug></s:debug>
</body>
源码下载地址:http://download.csdn.net/detail/u011518709/7896593
struts2的单个文件上传的更多相关文章
- Struts2 单个文件上传/多文件上传
1导入struts2-blank.war所有jar包:\struts-2.3.4\apps\struts2-blank.war 单个文件上传 upload.jsp <s:form action= ...
- sruts2:单个文件上传,多个文件上传(属性驱动)
文件上传功能在Struts2中得到了很好的封装,主要使用fileUpload上传组件. 1. 单个文件上传 1.1 创建上传单个文件的JSP页面.显示提交结果的JSP页面 uploadTest1.js ...
- Struts2 之 实现文件上传和下载
Struts2 之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ...
- Struts2 之 实现文件上传(多文件)和下载
Struts2 之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ...
- spring mvc文件上传(单个文件上传|多个文件上传)
单个文件上传spring mvc 实现文件上传需要引入两个必须的jar包 1.所需jar包: commons-fileupload-1.3.1.jar ...
- [转]Struts2多个文件上传
转载至:http://blog.csdn.net/hanxiaoshuang123/article/details/7342091 Struts2多个文件上传多个文件上传分为List集合和数组,下面我 ...
- 笨鸟先飞之Java(一)--使用struts2框架实现文件上传
无论是.net还是Java,我们最常接触到的就是文件的上传和下载功能,在Java里要实现这两个经常使用功能会有非常多种解决方案,可是struts2的框架却能给我们一个比較简单的方式,以下就一起来看吧: ...
- springboot文件上传: 单个文件上传 和 多个文件上传
单个文件上传 //文件上传统一处理 @RequestMapping(value = "/upload",method=RequestMethod.POST) @ResponseBo ...
- 4.struts2中的文件上传,下载
Struts2中文件的上传下载,是借用commons里面的包实现文件的上传,需要导入两个jar commons-fileupload-1.2.2.jar commons-io-2.0.1.jar 实现 ...
随机推荐
- Unity手游之路游戏摇杆之Easy Touch 3教程
之前已经介绍过Unity自带的摇杆Joystick,它用起来很简单.但是它也存在很多局限,不能全部满足普通mmo手游的一些需求,例如:要能方便地更好素材:能指定在某个区域显示,或者只有在该区域触摸时才 ...
- PJzhang:最基本的正则表达式实例
猫宁!!! 参考链接: https://www.cnblogs.com/fozero/p/7868687.html http://tool.oschina.net/regex/# http://too ...
- 当项目只有src文件和web文件时eclipse如何导入javaweb工程
原理是:利用工具生成class文件,并且在过程中检查出错误,生成对应的编译后文件,这样才能在tomcat等服务器上跑,服务器上只能跑编译后的文件. 1. 2. 3. . 4. 5. 6. 7.
- assembly x86(nasm)选择排序
有一个首地址为NUM的N字无序无符号整数数组,编制程序采用选择排序法使该数组中的数按照从小到大的次序排序输出. 选择排序: data segment message db 'This is a pro ...
- one jar(转)
http://blog.csdn.net/kabini/article/details/1598827
- php7+新特性
php7已经发布有段时间了,查了下正式版本的发布时间是2015年底,至于具体的新特性,在这里总结一下. 标量类型声明 php7新增了4种类型, 字符串(string), 整数 (int), 浮点数 ( ...
- css hack 笔记
body{background-color:#000\9;}/*ie*/ body{background-color:#0f0\9\0;}/*ie9及以上*/ body{background-colo ...
- WebForm随笔
一般处理程序中获取页面所传的值:int id = Convert.ToInt32(context.Request["id"]); 后台获取页面所传的值:int id = Conve ...
- hasNextInt()方法
hasNextInt()方法是判断控制台接收是否为数字,当你在控制台输入一个字符的时候,hasNextInt()判断你输入这个字符是不是数字,而不是接收值,当if判断通过之后执行接收,也就是你输入的那 ...
- eureka集群环境搭建
一:集群环境搭建 第一步:我们新建两个注册中心工程一个叫eureka_register_service_master.另外一个叫eureka_register_service_backup eurek ...