struts2实现文件上传(一)

一、文件上传步骤

Step1:引入jar包
xxx表示的是版本号,将下载的struts2解压后在lib目录下找到以下几个文件,将其复制到Web项目的WebRoot/WEB-INF/lib目录下。

//引入struts所需jar包和upload所需jar包
commons-fileupload-xxx.jar
commons-io-xxx.jar
commons-logging-xxx.jar
freemarker-xxx.jar
ognl-xxx.jar
struts2-core-xxx.jar
xwork-core-xxx.jar

Step2:编写静态页面 upload.jsp
我们使用的是struts2的UI控件,所以首先引入struts的标签库。

<!-- 引入struts的标签库 -->
<%@taglib prefix="s" uri="/struts-tags" %>

注意这里form表单的enctype属性值必须是multipart/form-data,否则不能上传,当点击上传按钮后表单会被提交到uploadAction.action。

<body>
    <s:form action="uploadAction" enctype="multipart/form-data">
        <s:textfield name="title" label="文件标题"></s:textfield>
        <s:file name="upload" label="选择文件"/>
        <s:submit value="上传"></s:submit>
    </s:form>
  </body>

Step3:创建UploadAction
上一步中表单会被提交到uploadAction,我们需要定义一个uploadAction的处理类UploadAction处理文件上传请求。
注意一下:表单提交的是uploadAction,我们定义的是UploadAction,这两者是不一样的,提交的是Action的名字,而UploadAction是Action的处理类,所以我们需要在struts.xml文件中进行配置两者的映射关系。

package cn.lzf.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

/**
 * 文件上传
 * @author Administrator
 *
 */
public class UploadAction extends ActionSupport {

    //文件标题
    private String title;

    //上传的文件
    private File upload;

    //上传的文件类型
    private String uploadContentType;

    //文件名
    private String uploadFileName;

    //保存的路径
    private String savePath;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public File getUpload() {
        return upload;
    }

    public void setUpload(File upload) {
        this.upload = upload;
    }

    public String getUploadContentType() {
        return uploadContentType;
    }

    public void setUploadContentType(String uploadContentType) {
        this.uploadContentType = uploadContentType;
    }

    public String getUploadFileName() {
        return uploadFileName;
    }

    public void setUploadFileName(String uploadFileName) {
        this.uploadFileName = uploadFileName;
    }

    /**
     * 获取到文件保存的路径,该路径是在struts.xml中当成参数配置的
     * @return
     */
    public String getSavePath() {
        return ServletActionContext.getServletContext().getRealPath(savePath);
    }

    public void setSavePath(String savePath) {
        this.savePath = savePath;
    }

    public UploadAction() {
        // TODO Auto-generated constructor stub
    }

    /**
     * 父类ActionSupport的方法
     * Action执行的方法
     */
    @Override
    public String execute() throws Exception {
        //获取待保存文件的位置的输出流
        FileOutputStream fos=new FileOutputStream(getSavePath()+"\\"+getUploadFileName());

        //获取上传文件的输入流
        FileInputStream fis=new FileInputStream(getUpload());

        //缓冲数组
        byte[] buff=new byte[1024];

        //不断将输入流中的数据写入输出流
        int len=0;
        while((len=fis.read(buff))>0){
            fos.write(buff,0,len);
        }

        //返回 成功标志
        return SUCCESS;
    }
}

Step4:配置UploadAction
定义好UploadAction,接下来需要配置Action字和Action处理类的映射关系,修改src/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="lzf" namespace="/" extends="struts-default">

        <action name="uploadAction" class="cn.lzf.action.UploadAction">
            <param name="savePath">/uploadFiles</param>
            <result name="success">/WEB-INF/struts2Test/day04/succ.jsp</result>
        </action>

    </package>
</struts>

在<action></action>标签中有两个元素,param表示参数,该参数会传入Action内;result定义的是逻辑视图名和资源的映射关系,Action对请求处理后会返回逻辑视图名,result标签的name属性表示的是逻辑视图名,当Action返回的逻辑视图名为success时会跳转到对应的资源文件,所以如果upload处理成功后会跳转到succ.jsp页面。
Step5:定义成功后的页面 succ.jsp
页面很简单,引入标签库,然后输出文件标题并将其作为图片显示出来

<!-- 引入struts的标签库 -->
<%@taglib prefix="s" uri="/struts-tags" %>
<body>
        文件上传成功!
    <s:property value=" + title"/><br>
    <img alt="" src="<s:property value="'uploadFiles/'+uploadFileName"/>">
 </body>
二、效果

这里写图片描述

这里写图片描述

三、结束语
//文件保存位置
//注意这个位置是web应用部署的uploadFiles目录下,而不是工作空间下的uploadFiles目录下
D:\tomcat8.0\tomcat_dir\webapps\WebTest\uploadFiles
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值