sturts2上传文件

Struts2文件上传 2007-12-05 22:29:51| 分类: Struts2 | 标签: |字号大

小 订阅
Struts2使用开源项目Apache Jakarta Commons FileUpload和内建的FileUploadInterceptor拦截器实现文件上传,所需的jar包如下:
commons-logging-1.1.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
struts2-core-2.0.6.jar
xwork-2.0.1.jar
commons-io-1.3.1.jar
commons-fileupload-1.2.jar

★文件上传页面 fileupload.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:form action="/fileUpload" method="post" enctype="multipart/form-data">
<s:file name="test"/>
<s:submit/>

<form action="/cys/fileUpload.action" method="post" enctype="multipart/form-data">
<input type="file" name="test" /><BR>
<input type="submit" />
</form>
这里需要注意的是,form的enctype属性必须设置为multipart/form-data。

★处理文件上传 FileUploadAction.java
package com.sun.web.action;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;

public class FileUploadAction extends BaseAction {

private File test;

private String testFileName;

private String testContentType;

public String defaultExecute() {
try {
String suffixName = testFileName.substring(testFileName
.lastIndexOf("."));
File upload = new File(getServletContext().getRealPath("/upload")
+ "/" + System.currentTimeMillis() + ".rar");
FileUtils.copyFile(test, upload);
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
}

public void setTest(File test) {
this.test = test;
}

public void setTestContentType(String testContentType) {
this.testContentType = testContentType;
}

public void setTestFileName(String testFileName) {
this.testFileName = testFileName;
}
}
在fileupload.jsp中,只有test一个字段,而FileUploadAction.java中,却有三个字段,Struts2怎么通过页面的一个字段设置Action里的
三个字段呢?没错,这就是FileUploadInterceptor的功劳了!你所要做的只是按照一定的样式命名这三个字段的set方法,而字段名可
以任意命名。第一个File类型的字段的set方法还是以常规的方式命名,另两个String类型的字段的set方法必须分别以“File字段的set方
法名+FileName”和“File字段的set方法名+ContentType”来命名。
testFileName,testContentType不要也可以,但这两个属性可以取得客户端上传文件的fileName和contentType
注:在提交时,struts2就将文件保存到web服务器的临时目录为一个.temp文件,此时属性test已经代表.temp文件了,其位置于
%catalina.home%\work\Catalina\localhost\web模块名称\upload__466c8ea_116bd9c011f__8000_00000015.tmp,但这个文件我们看
不到,我们调用FileUtils.copyFile(test, upload);只是相当于将服务器上的.temp文件转换到我们指定的目录,并重命名,

★ 配置文件 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="user" extends="struts-default" namespace="/">
<action name="fileUpload"
class="com.sun.web.action.FileUploadAction">
<result>/fileupload.jsp</result>
</action>
</package>
</struts>

★ 配置文件 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">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值