您所在的位置:开发 > Java > 在Struts 2中实现文件上传(1)

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

2007-03-26 14:52 佚名 中国IT实验室 字号:T | T
一键收藏,随时查看,分享好友!

本文给出了在Struts 2中实现文件上传具体步骤和实现的源代码,供大家参考!

AD:

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

内容导航



分享到:

  1. 彻底透视CDN痛点,互联网老兵聊聊CDN的那些事儿!
  2. 3行Python代码完成人脸识别

热点职位

更多>>

热点专题

更多>>

读书

标准C++开发入门与编程实践
本书着重介绍标准C++语言,即1998年由ISO正式推出的关于C++的国际性标准版本。 本书从最基础的编程语言概念讲起,共分6篇24章。

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院