struts1中的文件上传

struts1 2 中,分别对 commons-fileupload 组件进行了包装,使文件上传操作更方便。

本文讲解如何使用 struts1 上传文件。

步骤:

    1 编写 jsp 页面

    2 jsp 中的 form 表单配置一个 ActionForm

    3 编写 Action ,处理文件上传功能

    4 配置 struts-config.xml 文件

    5 测试

 

1、 首先有个 jsp 页面 —upload_form.jsp

<%@ page language = "java" contentType = "text/html; charset=ISO-8859-1"

    pageEncoding = "ISO-8859-1" %>

<%@ taglib uri = "/WEB-INF/struts-html.tld" prefix = "html" %>

<! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >

< html >

< head >

< meta http-equiv = "Content-Type" content = "text/html; charset=ISO-8859-1" >

< title > Upload File </ title >

</ head >

< body >

    < html:form action = " upload.do " method = "post" enctype = " multipart/form-data " >

        < html:file property = " file " ></ html:file >

        < input type = "submit" value = "Submit" />

    </ html:form >

</ body >

</ html >

其中的 action 是指提交到的 action

enctype 是指表单提交的数据格式

 

2 给上面的 jsp 中表单配一个 ActionForm –UploadForm

public class UploadForm extends ActionForm {

    private static final long serialVersionUID = 1L;

   

    private FormFile file ;

    public FormFile getFile() {

        return file ;

    }

    public void setFile(FormFile file) {

        this . file = file;

    }

}

其中的 file 成员变量对应 upload_form.jsp 表单中为 file property

struts1 中,文件对象被封装成了 org.apache.struts.upload.FormFile 对象。

 

 

3 编写 action –UploadAction

继承 org.apache.struts.action.Action

public class UploadAction extends Action {

    Logger logger = Logger.getLogger (UploadAction. class );

 

    @Override

    public ActionForward execute(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response)

            throws Exception {

 

        // 将缓存表单数据的 form 强转成 UploadForm 类型,得到其中的 file 变量

        UploadForm uf = (UploadForm) form;

        FormFile ff = uf.getFile();

 

        // 输出 UploadForm 中的变量 file 的信息 - 文件名 - 文件大小

        logger .debug( "file name : " + ff.getFileName());

        logger .debug( "file size : " + ff.getFileSize());

 

        // 得到该文件的输入流

        InputStream is = ff.getInputStream();

 

        // 该文件要保存的路径 - 文件名 “upload” web-root 下的一文件夹名,

        // getServlet().getServletContext().getRealPath("upload") 得到 "upload" 文件夹在服务器端的相对位置

        // ff.getFileName() 为保存时的文件名

        File file = new File(getServlet().getServletContext().getRealPath(

                "upload" ), ff.getFileName());

 

        logger .debug(file.getPath());

 

        // 创建一个输出流

        BufferedOutputStream bos = new BufferedOutputStream(

                new FileOutputStream(file));

 

        // 从输入流中读取字节,通过输出流写入 file 文件中

        int b = -1;

        while ((b = is.read()) != -1) {

            bos.write(b);

        }

        bos.close();

        is.close();

        return mapping.findForward( "success" );

    }

}

 

4 编写配置文件 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 = "uploadForm" type = "zl.form.UploadForm" />

    </ form-beans >

    < action-mappings >

        < action path = "/upload" type = "zl.action.UploadAction" name = "uploadForm" >

        </ action >

    </ action-mappings >

</ struts-config >

 

其中 /upload upload_form.jsp 提交到的地址相对应。

 

5 运行

 

运行成功, console 会打印所上传文件的 name size path 的值。

21:21:30,859 DEBUG UploadAction:33 - file name : Eclipse&#25253;&#34920;&#24037;&#20855;.bmp

21:21:30,859 DEBUG UploadAction:34 - file size : 1026198

21:21:30,859 DEBUG UploadAction:45 - D:/Program Files/tomcat6.0/webapps/test2/upload/Eclipse&#25253;&#34920;&#24037;&#20855;.bmp

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值