zoukankan      html  css  js  c++  java
  • struts提供文件上传功能

    1. 创建项目

    在 MyEclipse 中创建一个名称为 struts2Demo06 的 Web 项目,添加 Struts2 所需的 JAR 包,并在 web.xml 中配置 Struts2 的核心过滤器。

    2. 创建上传页面

    在项目的 WebContent 目录下创建一个名称为 fileUpload.jsp 的文件,使用该文件作为文件上传页面。编辑后如下所示。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@taglib prefix="s" uri="/struts-tags"%>
    <!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=UTF-8">
    <title>上传页面</title>
    </head>
    <body>
    <center>
        <s:form action="fileUpload" method="post" enctype="Multipart/form-data">
            <s:file name="file" label="上传文件" />
            <s:submit value="上传" />
        </s:form>
    </center>
    </body>
    </html>

    在上述页面代码中,创建了一个 form 表单,并修改 form 表单的 enctype 属性值为 multipart/form-data,以及修改 method 属性值为 post,然后使用 <s:file> 标签创建一个上传文本框,并使用 <s:submit> 标签创建了上传按钮。

    3. 创建 Action

    在 src 下新建一个名称为 com.mengma.action 的包,在包中新建一个名称为 FileUploadAction 的类,该类用于接收上传的文件,并执行上传方法,编辑后如下所示。

    package com.mengma.action;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class FileUploadAction extends ActionSupport {
        private static final long serialVersionUID = 1L;
        private File file; // 提交的文件
        private String fileFileName; // 提交的 file 的名字
        private String fileContentType; // 提交的file的类型
    
        // 此处省略三个属性的getter和setter方法
        public String execute() throws Exception {
            // 文件输入流
            InputStream is = new FileInputStream(file);
            // 设置文件保存的目录
            String uploadPath = ServletActionContext.getServletContext()
                    .getRealPath("/upload");
            // 设置目标文件
            File toFile = new File(uploadPath, this.getFileFileName());
            // 文件输出流
            OutputStream os = new FileOutputStream(toFile);
            byte[] buffer = new byte[1024];
            int length = 0;
            // 读取file文件输出到toFile文件中
            while (-1 != (length = is.read(buffer, 0, buffer.length))) {
                os.write(buffer);
            }
            // 关闭输入流和输出流
            is.close();
            os.close();
            return SUCCESS;
        }
    
        public File getFile() {
            return file;
        }
    
        public void setFile(File file) {
            this.file = file;
        }
    
        public String getFileFileName() {
            return fileFileName;
        }
    
        public void setFileFileName(String fileFileName) {
            this.fileFileName = fileFileName;
        }
    
        public String getFileContentType() {
            return fileContentType;
        }
    
        public void setFileContentType(String fileContentType) {
            this.fileContentType = fileContentType;
        }
    
    }

    上述文件中,声明了 file(上传的文件)、fileFileName(上传的文件名称)和 fileContentType(上传的文件类型)三个属性,其中 file 属性的名称与表单中文本域的参数必须相同,并且要为 File 类型,它用于保存封装的上传文件。

    一般来说,Action 中的属性与表单中提交的参数是相对应的,但在此表单中并没有提交 fileFileName 和 fileContentType 这两个参数,因为这两个参数是由 FileUploadIntercepter(文件上传拦截器)负责填充的,FileUploadIntercepter 会对其属性值进行设置。fileFileName 属性用于保存上传文件名称,fileContentType 属性用于保存上传文件的类型。

    在 execute() 方法中通过输入流读取 File 文件中的数据,通过取得上传文件名和上传目录设置一个目标文件,并通过循环输出流将数据写入到目标文件中,最后关闭输入/输出流。

    4. 创建配置文件

    在 src 下创建 Struts2 的配置文件 struts.xml,编辑后如下所示。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
    <package name="struts2" namespace="/" extends="struts-default">
      <action name="fileUpload" class="com.mengma.action.FileUploadAction">
       <result name="success">/result.jsp</result>
      </action>
    </package>
    </struts>

    5. 创建结果页面

    在项目的 WebContent 目录下新建一个名称为 result 的页面文件,此文件用于显示上传的结果,包括上传文件的名称及类型,编辑后如下所示。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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=UTF-8">
    <title>结果页面</title>
    </head>
    <body>
        <h2>文件上传成功!</h2>
        上传文件名:${fileFileName }
        <br /> 上传文件类型:${fileContentType }
    </body>
    </html>
    没有停止的脚步,只有倒下去的脚步
  • 相关阅读:
    LoadRunner使用记录
    JVM&GC详解
    常用网络操作命令
    IP地址、子网掩码、网络号、主机号、网络地址、主机地址详解
    交换机配置记录
    持续集成与自动化部署---代码流水线管理及Jenkins和gitlab集成
    Git的安装与使用详解
    性能测试---问题记录
    性能测试---实战篇
    c++实用快捷键
  • 原文地址:https://www.cnblogs.com/hkMblogs/p/13232961.html
Copyright © 2011-2022 走看看