您的位置:首页 > 编程语言 > Java开发

基于Struts FormFile上传文件

2011-01-21 19:31 411 查看
有关文件上传的控件可能非常多,比如有用于学习的SmartUpload、性能非常好的COS组件、有Apache的FileUpload组件、有Struts的FormFile组件、有Spring上传文件,还有其他一些开发的控件等等。假如你是用Struts,那基于Struts FormFile组件应该是一个不错的选择。

Struts FormFile跟Struts ActionForm结合得非常好,使用起来也非常简单,但是,对于同时上传多个附件,那就有点麻烦了!不管怎么样,它还是一个好东西,关键看大家怎么看待他了!

第一步,我们创建一个新的Struts工程,创建一个FileUploadForm,FileUploadForm如下所示:

程序代码

package zizz.struts;

import org.apache.struts.action.ActionForm;

import org.apache.struts.upload.FormFile;

public class FileUploadForm extends ActionForm{

private static final long serialVersionUID = -7794872310588861856L;

private FormFile uploadFile;

public FormFile getUploadFile() {

return uploadFile;

}

public void setUploadFile(FormFile uploadFile) {

this.uploadFile = uploadFile;

}

}

第二步,创建一个Action,用于处理上传的文件及保存在服务器的路径,FileUploadAction文件内容如下

程序代码

package zizz.struts;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.upload.FormFile;

public class FileUploadAction extends Action {

private static String UPLOAD_FILE_PATH = "c:/income/";

@Override

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws Exception {

FileUploadForm uploadForm = (FileUploadForm)form;

//得到上传的文件

FormFile uploadFile = uploadForm.getUploadFile();

//得到文件名

String fileName = uploadFile.getFileName();

//得到文件大小

int fileSize = uploadFile.getFileSize();

System.out.println("FileName = " + fileName);

System.out.println("FileSize=" + fileSize);

boolean result = true;

try{

//得到文件的输入流

InputStream is = uploadFile.getInputStream();

//上传文件

uploadFile(fileName,is);

}catch(IOException ex){

ex.printStackTrace();

//假如上传文件失败,设置一个失败的标记位

result = false;

}

if(result){

return mapping.findForward("success");

} else {

return mapping.findForward("fail");

}

}

private void uploadFile(String fileName,InputStream is) throws IOException{

OutputStream os = new FileOutputStream(UPLOAD_FILE_PATH + fileName);

//8k缓存数据

byte[] buffer = new byte[1024 * 8];

//设置读进缓存的字节数

int len;

while((len=is.read(buffer))!=-1){

//将缓存数据写入磁盘

os.write(buffer,0,len);

}

//关闭输出流

os.close();

//关闭输入流

is.close();

}

}

第三步,编写文件上传的jsp文件

程序代码

<%@ page language="java" contentType="text/html; charset=GBK"%>

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>文件上传表单</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

</head>

<body>

<html:form action="/upload" enctype="multipart/form-data">

上传文件:<html:file property="uploadFile"></html:file>

<html:submit value="上传文件"></html:submit>

</html:form>

</body>

</html>

第四步,配置struts-config.xml文件

程序代码

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>

<data-sources />

<form-beans>

<form-bean name="fileUploadForm" type="zizz.struts.FileUploadForm"></form-bean>

</form-beans>

<global-exceptions />

<global-forwards />

<action-mappings>

<action path="/upload" name="fileUploadForm" scope="request" type="zizz.struts.FileUploadAction">

<forward name="success" path="/success.jsp" redirect="true"></forward>

<forward name="fail" path="/fail.jsp" redirect="true"></forward>

</action>

</action-mappings>

<message-resources parameter="zizz.struts.ApplicationResources" />

</struts-config>

第五步,发布应用系统,检查测试结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息