在Struts 2中实现文件上传(1)

发表于:2007-06-11来源:作者:点击数: 标签:
Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。 具体实现 前段时间Apache发布了Strut

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

具体实现

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

清单1:依赖类包的列表

首先,创建文件上传页面FileUpload.jsp,内容如下:

清单2: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 >

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

其次是FileUploadAction.java代码:

清单3:tutorial/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;

}    

}


共4页: 1 [2] [3] [4] 下一页

原文转自:http://www.ltesting.net

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
...