zoukankan      html  css  js  c++  java
  • struts2文件上传及注意事项

    1、struts2的环境配置,我用的是struts2.3.4

    1)所需jar包如下:

    下载地址:http://labs.mop.com/apache-mirror//struts/binaries/struts-2.3.4-all.zip

    2)web.xml如下:

    View Code
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <welcome-file-list>
            <welcome-file>input.jsp</welcome-file>
        </welcome-file-list>
    
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
    </web-app>

    3)struts2配置文件struts.xml:

    View Code
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
        "http://struts.apache.org/dtds/struts-2.1.dtd">
    
    <struts>
        <!-- 指定允许上传的文件最大字节数。默认值是2097152(2M) -->
        <constant name="struts.multipart.maxSize" value="20971520" />
        <constant name="struts.devMode" value="true" />
    
        <package name="upload" extends="struts-default" namespace="/">
            <action name="input" class="com.ljmin.action.UploadAction" method="input">
                <result name="input">/input.jsp</result>
            </action>
            <action name="upload" class="com.ljmin.action.UploadAction" method="upload">
                <result name="upload">/upload.jsp</result>
            </action>
        </package>
    
    </struts>
        

    2、jsp里加上文件标签

    <form action="upload/upload" method="post" enctype="multipart/form-data">
            <input type="file" name="myFile">
            <input type="submit" value="上传">
        </form>

    注意:enctype="multipart/form-data" 必须写,没有会报错。

    3、UploadAction

    View Code
    package com.ljmin.action;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Date;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    @SuppressWarnings("serial")
    public class UploadAction extends ActionSupport {
        private File myFile;
        private String fileName;
        private String saveName;
        private static final int BUFFER_SIZE = 8 * 1024;
    
        public String input() {
            return "input";
        }
    
        public String upload() {
            /* 截取后缀名 */
            int pos = fileName.lastIndexOf(".");
            String str = fileName.substring(pos);
            // 时间加后缀名保存
            saveName = new Date().getTime() + str;
            // 根据服务器的文件保存地址和原文件名创建目录文件全路径
            File imageFile = new File(ServletActionContext.getServletContext()
                    .getRealPath("upload")
                    + "/" + saveName);
            copy(myFile, imageFile);
    
            return "upload";
        }
    
        // 复制方法
        public static void copy(File src, File dst) {
            try {
                InputStream in = null;
                OutputStream out = null;
                try {
                    in = new BufferedInputStream(new FileInputStream(src),
                            BUFFER_SIZE);
                    out = new BufferedOutputStream(new FileOutputStream(dst),
                            BUFFER_SIZE);
                    byte[] buffer = new byte[BUFFER_SIZE];
                    while (in.read(buffer) > 0) {
                        out.write(buffer);
                    }
                } finally {
                    if (null != in) {
                        in.close();
                    }
                    if (null != out) {
                        out.close();
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        //得到文件名
        public void setMyFileFileName(String fileName) {
            this.fileName = fileName;
        }
    
        public File getMyFile() {
            return myFile;
        }
    
        public void setMyFile(File myFile) {
            this.myFile = myFile;
        }
    
        public String getFileName() {
            return fileName;
        }
    
        public void setFileName(String fileName) {
            this.fileName = fileName;
        }
    
        public String getSaveName() {
            return saveName;
        }
    
        public void setSaveName(String saveName) {
            this.saveName = saveName;
        }
    
    }

    注意:

    (1) ServletActionContext.getServletContext().getRealPath("upload") 表示服务器工程目录下的upload文件夹。跟工作路径是不一样的。

    所以项目重新部署的时候,这个文件夹会被替换掉,保存的文件也会被删除。测试阶段,重新部署项目应该先备份这些文件。

    (2) public void setMyFileFileName(String fileName) {
      this.fileName = fileName;
     }

    是把myFile路径里的文件名称赋值给fileName.

    (3) 上传文件名为中文的图片时,img将不能显示中文命名的图片,如:<img alt="" src="upload/中文.jpg">。

      如要显示,必须先转码。这里建议用“时间+后缀名”的方式,保存上传的图片。这样保证图片不重复,还避免了中文问题。

    (4) 上传文件大小默认是2M,超出会报错,可以在struts.xml更改默认大小:

      <constant name="struts.multipart.maxSize" value="20971520" />  

    源码下载:https://files.cnblogs.com/ljmin/upload.zip

  • 相关阅读:
    Hadoop 学习笔记 (十) hadoop2.2.0 生产环境部署 HDFS HA Federation 含Yarn部署
    hadoop 2.x 安装包目录结构分析
    词聚类
    Hadoop 学习笔记 (十一) MapReduce 求平均成绩
    Hadoop 学习笔记 (十) MapReduce实现排序 全局变量
    Hadoop 学习笔记 (九) hadoop2.2.0 生产环境部署 HDFS HA部署方法
    Visual Studio Code 快捷键大全(Windows)
    Eclipse安装教程 ——史上最详细安装Java &Python教程说明
    jquery操作select(取值,设置选中)
    $.ajax 中的contentType
  • 原文地址:https://www.cnblogs.com/ljmin/p/2581012.html
Copyright © 2011-2022 走看看