zoukankan      html  css  js  c++  java
  • Struts2——(8)struts2中文件的上传

    通过2种方式模拟单个文件上传,效果如下所示

    开发步骤如下:

    1、新建一个web工程,导入struts2上传文件所需jar,如下图

    目录结构

                

    2、新建Action 

    第一种方式

    package com.ljq.action;
    
    import java.io.File;
    
    import org.apache.commons.io.FileUtils;
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    
    @SuppressWarnings("serial")
    public class UploadAction extends ActionSupport{
        
        private File image; //上传的文件
        private String imageFileName; //文件名称
        private String imageContentType; //文件类型
    
        public String execute() throws Exception {
            String realpath = ServletActionContext.getServletContext().getRealPath("/images");
            //D:apache-tomcat-6.0.18webappsstruts2_uploadimages
            System.out.println("realpath: "+realpath);
            if (image != null) {
                File savefile = new File(new File(realpath), imageFileName);
                if (!savefile.getParentFile().exists())
                    savefile.getParentFile().mkdirs();
                FileUtils.copyFile(image, savefile);
                ActionContext.getContext().put("message", "文件上传成功");
            }
            return "success";
        }
    
        public File getImage() {
            return image;
        }
    
        public void setImage(File image) {
            this.image = image;
        }
    
        public String getImageFileName() {
            return imageFileName;
        }
    
        public void setImageFileName(String imageFileName) {
            this.imageFileName = imageFileName;
        }
    
        public String getImageContentType() {
            return imageContentType;
        }
    
        public void setImageContentType(String imageContentType) {
            this.imageContentType = imageContentType;
        }
    
        
    }         

    第二种方式

    package com.ljq.action;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    @SuppressWarnings("serial")
    public class UploadAction2 extends ActionSupport {
    
        // 封装上传文件域的属性
        private File image;
        // 封装上传文件类型的属性
        private String imageContentType;
        // 封装上传文件名的属性
        private String imageFileName;
        // 接受依赖注入的属性
        private String savePath;
    
        @Override
        public String execute() {
            FileOutputStream fos = null;
            FileInputStream fis = null;
            try {
                // 建立文件输出流
                System.out.println(getSavePath());
                fos = new FileOutputStream(getSavePath() + "\" + getImageFileName());
                // 建立文件上传流
                fis = new FileInputStream(getImage());
                byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = fis.read(buffer)) > 0) {
                    fos.write(buffer, 0, len);
                }
            } catch (Exception e) {
                System.out.println("文件上传失败");
                e.printStackTrace();
            } finally {
                close(fos, fis);
            }
            return SUCCESS;
        }
    
        /**
         * 返回上传文件的保存位置
         * 
         * @return
         */
        public String getSavePath() throws Exception{
            return ServletActionContext.getServletContext().getRealPath(savePath); 
        }
    
        public void setSavePath(String savePath) {
            this.savePath = savePath;
        }
    
        public File getImage() {
            return image;
        }
    
        public void setImage(File image) {
            this.image = image;
        }
    
        public String getImageContentType() {
            return imageContentType;
        }
    
        public void setImageContentType(String imageContentType) {
            this.imageContentType = imageContentType;
        }
    
        public String getImageFileName() {
            return imageFileName;
        }
    
        public void setImageFileName(String imageFileName) {
            this.imageFileName = imageFileName;
        }
    
        private void close(FileOutputStream fos, FileInputStream fis) {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    System.out.println("FileInputStream关闭失败");
                    e.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    System.out.println("FileOutputStream关闭失败");
                    e.printStackTrace();
                }
            }
        }
    
    }     

    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>
        <!-- 该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
            如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 -->
        <constant name="struts.action.extension" value="do" />
        <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
        <constant name="struts.serve.static.browserCache" value="false" />
        <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
        <constant name="struts.configuration.xml.reload" value="true" />
        <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
        <constant name="struts.devMode" value="true" />
        <!-- 默认的视图主题 -->
        <constant name="struts.ui.theme" value="simple" />
        <!--<constant name="struts.objectFactory" value="spring" />-->
        <!--解决乱码    -->
        <constant name="struts.i18n.encoding" value="UTF-8" />
        <!-- 指定允许上传的文件最大字节数。默认值是2097152(2M) -->
        <constant name="struts.multipart.maxSize" value="10701096"/>
        <!-- 设置上传文件的临时文件夹,默认使用javax.servlet.context.tempdir -->
        <constant name="struts.multipart.saveDir " value="d:/tmp" />
        
             
        <package name="upload" namespace="/upload" extends="struts-default">
            <action name="*_upload" class="com.ljq.action.UploadAction" method="{1}">
                <result name="success">/WEB-INF/page/message.jsp</result>
            </action>
        </package>
        
        <package name="upload2" extends="struts-default">
            <action name="upload2" class="com.ljq.action.UploadAction2" method="execute">
                <!-- 动态设置savePath的属性值 -->
                <param name="savePath">/images</param>
                <result name="success">/WEB-INF/page/message.jsp</result>
                <result name="input">/upload/upload.jsp</result>
                <interceptor-ref name="fileUpload">
                    <!-- 文件过滤 -->
                    <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
                    <!-- 文件大小, 以字节为单位 -->
                    <param name="maximumSize">1025956</param>
                </interceptor-ref>
                <!-- 默认拦截器必须放在fileUpload之后,否则无效 -->
                <interceptor-ref name="defaultStack" />
            </action>
        </package>
    </struts>  

    上传表单页面

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@taglib uri="/struts-tags" prefix="s" %>
    
    <!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">
        </head>
    
        <body>
            <!-- ${pageContext.request.contextPath}/upload/execute_upload.do -->
            <!-- ${pageContext.request.contextPath}/upload2/upload2.do -->
            <form action="${pageContext.request.contextPath}/upload2/upload2.do" 
                  enctype="multipart/form-data" method="post">
                文件:<input type="file" name="image">
                    <input type="submit" value="上传" />
            </form>
            <br/>
            <s:fielderror />
        </body>
    </html>        

    显示结果页面

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <!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">    
      </head>
      
      <body>
        上传成功!
        <br/><br/>
        <!-- ${pageContext.request.contextPath} tomcat部署路径,
              如:D:apache-tomcat-6.0.18webappsstruts2_upload -->
        <img src="${pageContext.request.contextPath}/<s:property value="'images/'+imageFileName"/>">
        <s:debug></s:debug>
      </body>
    </html>


  • 相关阅读:
    What the key facts to choose Row Store and Column Store 沧海
    自定义数据源(ECC>BW) 沧海
    What is SAP HANA appliance software 沧海
    安装BI_CONT时遇到Open Data Extraction Requests的问题 沧海
    Process Chain\DTP\Infopackage相关的几个table和function module 沧海
    Note 741478 FAQ: Materialized views 沧海
    HANA 与 Exalytics 的对比 沧海
    SAP HANA database and how to improve performance 沧海
    SAP HANA 已实施的客户清单 沧海
    BW BEx的VBA开发接口介绍 沧海
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469569.html
Copyright © 2011-2022 走看看