struts2中文件上传的实现
2012-05-29 23:53
411 查看
使用了apache的common-fileupload组件,同时还依赖与common-io包,使用之前,需要引入这两个包。
common-upload组件是把文件先上传到一个临时目录,然后需要自己手动在Action中处理,将文件改名,并且复制到指定的目录。
首先,创建文件上传页面:
<% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncoding = " utf-8 " %>
<% @ taglib prefix = " s " uri = " /struts-tags " %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< title > Struts 2 File Upload </ title >
</ head >
< body >
< s:form action ="fileUpload" method ="POST" enctype ="multipart/form-data" >
< s:file name ="myFile" label ="Image File" />
< s:textfield name ="caption" label ="Caption" />
< s:submit />
</ s:form >
</ body >
</ html >
需要注意的就是from中的enctype ="multipart/form-data",还有要注意file标签的name值,要和后台Action中的名字一致,下面看一下Action代码。
package tutorial;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction extends ActionSupport {
private static final long serialVersionUID = 572146812454l ;
private static final int BUFFER_SIZE = 16 * 1024 ;
private File myFile;
private String contentType;
private String fileName;
private String imageFileName;
private String caption;
public void setMyFileContentType(String contentType) {
this .contentType = contentType;
}
public void setMyFileFileName(String fileName) {
this .fileName = fileName;
}
public void setMyFile(File myFile) {
this .myFile = myFile;
}
public String getImageFileName() {
return imageFileName;
}
public String getCaption() {
return caption;
}
public void setCaption(String caption) {
this .caption = caption;
}
private static void copy(File src, File dst) {
try {
InputStream in = null ;
OutputStream out = null ;
try {
in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
byte [] buffer = new byte [BUFFER_SIZE];
while (in.read(buffer) > 0 ) {
out.write(buffer);
}
} finally {
if ( null != in) {
in.close();
}
if ( null != out) {
out.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String getExtention(String fileName) {
int pos = fileName.lastIndexOf( " . " );
return fileName.substring(pos);
}
@Override
public String execute() {
imageFileName = new Date().getTime() + getExtention(fileName);
File imageFile = new File(ServletActionContext.getServletContext().getRealPath( " /UploadImages " ) + " / " + imageFileName);
copy(myFile, imageFile);
return SUCCESS;
}
}
其中的FileName和contentType是common-upload组件会自己赋值的,只要写上这两个固定的名字就行了。特别特别需要注意的是这两个方法的set方法,不要使用myeclipse自动生成set方法,而是setMyFileFileName,看到有什么区别了吧,函数名中加了一个MyFile,这个是我们自定义的用于接收传过来的文件的对象。如果把这里写错了,就会报空指针错,这里一定要特别注意!
把文件上传到了网站根目录下的UploadImages下,这个文件夹需要自己手动创建,不然会提示没有权限。
接下来是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 >
< package name ="fileUploadDemo" extends ="struts-default" >
< action name ="fileUpload" class ="tutorial.FileUploadAction" >
< interceptor-ref name ="fileUploadStack" />
< result name ="success" > /ShowUpload.jsp </ result >
</ action >
</ package >
</ struts >
注意其中的interceptor-ref属性的配置。
web.xml没什么区别,就不贴出来了。
common-upload组件是把文件先上传到一个临时目录,然后需要自己手动在Action中处理,将文件改名,并且复制到指定的目录。
首先,创建文件上传页面:
<% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncoding = " utf-8 " %>
<% @ taglib prefix = " s " uri = " /struts-tags " %>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< title > Struts 2 File Upload </ title >
</ head >
< body >
< s:form action ="fileUpload" method ="POST" enctype ="multipart/form-data" >
< s:file name ="myFile" label ="Image File" />
< s:textfield name ="caption" label ="Caption" />
< s:submit />
</ s:form >
</ body >
</ html >
需要注意的就是from中的enctype ="multipart/form-data",还有要注意file标签的name值,要和后台Action中的名字一致,下面看一下Action代码。
package tutorial;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction extends ActionSupport {
private static final long serialVersionUID = 572146812454l ;
private static final int BUFFER_SIZE = 16 * 1024 ;
private File myFile;
private String contentType;
private String fileName;
private String imageFileName;
private String caption;
public void setMyFileContentType(String contentType) {
this .contentType = contentType;
}
public void setMyFileFileName(String fileName) {
this .fileName = fileName;
}
public void setMyFile(File myFile) {
this .myFile = myFile;
}
public String getImageFileName() {
return imageFileName;
}
public String getCaption() {
return caption;
}
public void setCaption(String caption) {
this .caption = caption;
}
private static void copy(File src, File dst) {
try {
InputStream in = null ;
OutputStream out = null ;
try {
in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
byte [] buffer = new byte [BUFFER_SIZE];
while (in.read(buffer) > 0 ) {
out.write(buffer);
}
} finally {
if ( null != in) {
in.close();
}
if ( null != out) {
out.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String getExtention(String fileName) {
int pos = fileName.lastIndexOf( " . " );
return fileName.substring(pos);
}
@Override
public String execute() {
imageFileName = new Date().getTime() + getExtention(fileName);
File imageFile = new File(ServletActionContext.getServletContext().getRealPath( " /UploadImages " ) + " / " + imageFileName);
copy(myFile, imageFile);
return SUCCESS;
}
}
其中的FileName和contentType是common-upload组件会自己赋值的,只要写上这两个固定的名字就行了。特别特别需要注意的是这两个方法的set方法,不要使用myeclipse自动生成set方法,而是setMyFileFileName,看到有什么区别了吧,函数名中加了一个MyFile,这个是我们自定义的用于接收传过来的文件的对象。如果把这里写错了,就会报空指针错,这里一定要特别注意!
把文件上传到了网站根目录下的UploadImages下,这个文件夹需要自己手动创建,不然会提示没有权限。
接下来是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 >
< package name ="fileUploadDemo" extends ="struts-default" >
< action name ="fileUpload" class ="tutorial.FileUploadAction" >
< interceptor-ref name ="fileUploadStack" />
< result name ="success" > /ShowUpload.jsp </ result >
</ action >
</ package >
</ struts >
注意其中的interceptor-ref属性的配置。
web.xml没什么区别,就不贴出来了。
相关文章推荐
- struts2 实现文件的上传 和 下载
- Struts2实现文件上传报错(一)
- struts2实现文件上传显示进度条效果
- ocupload、struts2实现excel文件上传,poi解析
- Struts2实现单文件上传
- Struts2实现上传文件
- struts2中实现文件的上传
- Struts2通过commons-fileupload实现文件上传
- Struts2.x中实现文件上传功能
- Struts2实现文件上传,直接访问JSP页面出现异常
- Struts2实现文件上传
- [置顶] ckeditor 与 ckfinder基于Struts2 集成实现在线编辑以及文件上传(JAVA版)
- 用Struts2实现文件上传
- Struts2实现文件的上传和下载
- Struts2 中整合DWR3实现文件上传
- struts2实现文件上传
- struts2中实现文件上传功能
- 基于struts2--实现文件上传下载
- Struts2实现多文件上传
- 使用struts2和AJAX实现文件上传并显示进度条