近期用webwork做项目,有上传文件操作,在此记录一下,有部分内容来自网络,javascript脚本只支持IE,不支持firefox。
一、FileUploadAction.java 文件;
package ebizserve.cpd.view.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.log4j.Logger;
import ebizserve.util.FileUtil;
public class FileUploadAction extends BaseAction {
private Logger logger = Logger.getLogger(FileUploadAction.class);
private static final long serialVersionUID = 5943699833329252614L;
// 对应<input type=file name=fileImages />中的file控件name名称;
private File[] fileImages;
// 获取 文件名称为 fileImages 的 file 控件上传文件的文件名称;
private String[] fileImagesFileName;
// 默认调用方法
public String execute() {
File[] newFileImages = FileUtil.renameToFiles(fileImagesFileName,
fileImages);
if (newFileImages != null && newFileImages.length > 0) {
for (File file : newFileImages) {
try {
if (!FileUtil.verifyFile(file, new String[] { "jpg", "gif",
"jpeg", "png" })) {
this.addFieldError("errorimage",
"Error:Invalid File Type");
return "create";
}
} catch (Exception e) {
e.printStackTrace();
}
}
for (File fileImage : newFileImages) {
try {
FileInputStream fileIn;
int filesize = 0;
String imageName = fileImage.getName();
fileIn = new FileInputStream(fileImage);
filesize = fileIn.available();
logger.info("获得文件名称: " + imageName);
logger.info("获得文件大小:" + filesize);
FileUtil.saveFile(fileImage, imageName,
getProductFilePath());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return SUCCESS;
}
// 对应的 getXXX()/setXXX()方法;
public File[] getFileImages() {
return fileImages;
}
public void setFileImages(File[] fileImages) {
this.fileImages = fileImages;
}
public String[] getFileImagesFileName() {
return fileImagesFileName;
}
public void setFileImagesFileName(String[] fileImagesFileName) {
this.fileImagesFileName = fileImagesFileName;
}
}
二、BaseAction.java 文件;
package ebizserve.cpd.view.action;
import java.io.File;
import com.opensymphony.xwork.ActionSupport;
public class BaseAction extends ActionSupport {
private static final long serialVersionUID = -2796680436059696842L;
private static final String FILE_PATH = "d:/upload/"; // 文件realpath;
public String getProductFilePath() {
File filesPath = new File(FILE_PATH);
if (!filesPath.exists()) { // (canRead()
filesPath.mkdirs(); // mkdirs()
}
return FILE_PATH;
}
}
三、FileUtil.java 文件;
package ebizserve.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class FileUtil {
// 重命名文件;
public static File[] renameToFiles(String[] fileNames, File[] files) {
File[] retFiles = null;
if (fileNames != null && fileNames.length > 0) {
retFiles = new File[fileNames.length];
for (int i = 0, n = fileNames.length; i < n; i++) {
File dist = new File(fileNames[i]);
files[i].renameTo(dist);
retFiles[i] = dist;
}
}
return retFiles;
}
// save文件;
public static long saveFile(File file, String fileName, String filePath)
throws Exception {
if (file == null) {
return 0;
}
File filepath = new File(filePath);
if (!filepath.isDirectory())
filepath.mkdirs();
File filedesc = new File(filepath, fileName);
return copyFile(file, filedesc);
}
// copy文件;
public static long copyFile(File fromFile, File toFile) {
long len = 0;
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(fromFile);
out = new FileOutputStream(toFile);
byte[] t = new byte[1024];
int ii = 0;
while ((ii = in.read(t)) > 0) {
out.write(t, 0, ii);
len += ii;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (out != null) {
try {
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return len;
}
// 验证文件正确性;
public static boolean verifyFile(File file, String[] exts) throws Exception {
boolean flag = false;
if (file != null) {
String ext = getExtension(file.getName());
if (ext == null) {
return false;
}
if (exts != null && exts.length > 0) {
if (exts[0].equals("*.*"))
return true;
for (int i = 0; i < exts.length; i++) {
if (ext.equalsIgnoreCase(exts[i])) {
flag = true;
break;
}
}
}
}
return flag;
}
// 取得文件扩展名;
public static String getExtension(String fileName) {
int newEnd = fileName.length();
int i = fileName.lastIndexOf('.', newEnd);
if (i != -1) {
return fileName.substring(i + 1, newEnd);
} else {
return null;
}
}
}
四、Web.xml配置文件;
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>webwork</filter-name>
<filter-class>
com.opensymphony.webwork.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>webwork</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
</web-app>
五、xwork.xml 配置文件;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
<xwork>
<include file="webwork-default.xml" />
<package name="default" extends="webwork-default">
<interceptors>
<interceptor-stack name="validationStack">
<interceptor-ref name="validation" />
<interceptor-ref name="component" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="validationStack" />
</package>
<!-- 引用多个 xwork_*.xml -->
<include file="action/xwork_upload.xml" />
</xwork>
六、xwork_upload.xml 配置文件;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
<xwork>
<package name="productbase" extends="default">
<interceptors>
<interceptor name="upload"
class="com.opensymphony.webwork.interceptor.FileUploadInterceptor">
<param name="maximumSize">10000000</param>
</interceptor>
<interceptor-stack name="uploadStack">
<interceptor-ref name="upload" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="WSStack" />
<action name="doUpload"
class="ebizserve.cpd.view.action.FileUploadAction">
<result name="success" type="dispatcher">
<param name="location">/fileupload/success.jsp</param>
</result>
<interceptor-ref name="params" /><!-- 将请求中的参数设置到Action中去 -->
<interceptor-ref name="basicStack" />
<interceptor-ref name="uploadStack" />
<interceptor-ref name="model-driven" />
</action>
</package>
</xwork>
七、webwork.properties 属性文件;
# 保存的目录缺省使用 javax.servlet.context.tempdir
webwork.multipart.saveDir= javax.servlet.context.tempdir
webwork.multipart.maxSize=4097152
# 文件上传设置
# 用来处理HTTP POST请求,编码使用MIME-type multipart/form-data方式的
webwork.multipart.parser=jakarta
# 指定locale,编码
webwork.i18n.encoding=UTF-8
webwork.custom.i18n.resources=messages,acl,definition
# 开发模式设定
webwork.devMode = false
# 配置自动更新设定
webwork.configuration.xml.reload=true
# 国际化资源设定
webwork.i18n.reload=true
访问方式:
http://localhost:8080/webworkupload/fileupload/upload.jsp]
分享到:
相关推荐
在这个“WebWork 文件上传 多个文件上传 范例”中,我们将深入探讨如何使用WebWork实现多文件上传的功能。 首先,了解文件上传的基本原理是必要的。在HTTP协议中,文件上传通常通过POST请求实现,其中包含了...
这个是我查看了大量的网上文档后,利用webwork的上传机制写的一个上传到例子。因为网上很多都转来转去的文档。能不能不运行,还不一定。改起来很费时,所以我把我写的上传上去。力争做到用最少的代码和简单配置来...
在本文中,我们将深入探讨如何使用WebWork框架来实现一个简单的图片上传功能,并在网页上显示上传的图片。WebWork是Java Web开发中的一种MVC(Model-View-Controller)框架,它提供了一种优雅的方式来处理用户请求、...
本文将深入探讨WebWork2.2.7中的简单文件上传功能,这在现代Web应用中是必不可少的,允许用户上传图片、文档等各种类型的数据。 在Web开发中,文件上传通常涉及到表单提交和服务器端的处理。WebWork2.2.7支持使用...
在.NET框架中,C#语言提供了丰富的功能来实现文件上传和图片上传的处理。这篇文章将深入探讨如何使用C#在Web应用中实现这些功能,并在网页上按比例显示上传的图片。 首先,我们需要理解文件上传的基本流程。在Web...
4. **上传(upload)**:WebWork提供文件上传功能,可以处理用户通过表单提交的多部分/混合(multipart/form-data)请求。通过使用`<ww:form>`标签的`enctype="multipart/form-data"`属性和相关的动作方法,可以接收...
- **多文件选择**:允许用户一次性选择多个文件进行上传,提高了效率。 - **进度条显示**:在上传过程中显示进度条,让用户了解上传状态。 - **预览功能**:支持在上传前预览图片文件,提高用户体验。 - **文件类型...
Action是业务逻辑的控制器,它通过拦截器链(Interceptor Stack)处理请求,这些拦截器可以实现如验证、工作流、文件上传等通用功能。Action执行完毕后,通过Action的execute方法处理结果,将数据输出到浏览器,可以...
**Wicket**是一个基于Java的Web应用开发框架,它的设计理念和技术实现与Struts、WebWork、Tapestry等框架相似,但也有其独特之处。根据给定的文档,我们可以总结出以下关键知识点: ##### 1.1 Wicket的历史背景 - ...
例如,workflow拦截器处理业务流程,validation拦截器进行数据校验,而文件上传功能可以通过专门的拦截器实现。 3. **Action**:Action是业务逻辑控制器,它实现了用户的特定操作。当请求经过拦截器链后,会回调...
Struts2 的诞生是WebWork和Struts社区合作的结果,合并了两个框架的优点,使得新版本在易用性上有了显著提升。 Struts2 的核心架构包括以下几个主要部分: 1. **Web浏览器请求**:用户通过Web浏览器发起对资源的...
Struts2 的诞生是WebWork和Struts社区合并的结果,它继承了两个框架的优点,使得开发者能够更方便地使用。 在Struts2的体系架构中,当Web浏览器发起一个资源请求(如/mypage.action或/reports/myreport.pdf)时,...
- **定义**: Wicket是一款基于Java的Web应用开发框架,与Struts、WebWork、Tapestry等框架类似。 - **特点**: - Html和代码的有效分离,便于团队合作。 - 基于规则的配置,减少XML等配置文件的使用。 - 学习曲线...
- **用途**: 支持FCKEditor的图片文件上传和浏览功能。 - **应用场景**: 需要富文本编辑器的应用程序。 24. **freemarker.jar** - **用途**: WebWork框架中的模板引擎。 - **应用场景**: 需要动态生成HTML内容...
它利用了JasperReports这一功能全面的开源报表引擎,并采用了包括WebWork、Velocity、Quartz 和 Hibernate 在内的领先开源组件进行开发。 **OpenReports**支持广泛的报表需求,通过以下三个级别的报表生成来实现: ...