在Struts2中实现文件上传

文章作者 100test 发表时间 2007:03:26 18:01:55
来源 100Test.Com百考试题网


Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。

具体实现

前段时间Apache发布了Struts 2.0.6 GA,所以本文的实现是以该版本的Struts作为框架的。以下是例子所依赖类包的列表:依赖类包的列表
清单1 依赖类包的列表

首先,创建文件上传页面FileUpload.jsp,内容如下:
<% @ 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 >

清单2 FileUpload.jsp

在FileUpload.jsp中,先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处。接下来,标志将文件上传控件绑定到Action的myFile属性。

其次是FileUploadAction.java代码:

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.
}


}
清单3 tutorial/FileUploadAction.java



相关文章


细说循序渐进学习Ajax的途径
JAVA中浅复制与深复制
在Struts2中实现文件上传
Composite模式及其在JSF中的应用
KVM的执行引擎--栈和帧、指令集
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛