zoukankan      html  css  js  c++  java
  • Struts2 文件上传

    一:表单准备

    要想使用HTML 表单上传一个或多个文件
        –HTML表单的 enctype属性设置为multipart/form-data
        –须把HTML 表单的method 属性设置为post
        –需添加<inputtype=“file”>字段.
    二:Struts2 文件上传原理以及步骤:

    ①  Struts应用程序里,FileUpload拦截器Jakarta Commons FileUpload组件可以完成文件的上传.
    ② 步骤:
         –1. Jsp页面的文件上传表单里使用 file 标签.如果需要一次上传多个文件, 就必须使用多个 file 标签,但它们的名字必须是相同的
         –2. Action 中新添加 3个和文件上传相关的属性. 3 个属性的名字必须是以下格式
              [FileName] : File -被上传的文件。例如:data
              [FileName]ContentType : String -上传文件的文件类型。例如:dataContentType
              [FileName]FileName : String -上传文件的文件名。例如:dataFileName
              如果上上传多个文件,可以使用List
    ③ 简单文件上传示例:

    表单页面:

    <%@ 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>Insert title here</title>
    </head>
    <body>
     <form action="upload" enctype="multipart/form-data" method="post">
        请选择文件:<input type="file" name="uploadFile">
              <input type="submit" value="上传"/>
     </form>
    </body>
    </html>
    后台上传处理Action:

    package com.elgin.action;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import javax.servlet.ServletContext;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class UploadAction extends ActionSupport {
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	
    	private File uploadFile;
    	
    	//注意如下2个成员变量的命名形式
    	private String uploadFileFileName;
    	private String uploadFileContentType;
    
    	public File getUploadFile() {
    		return uploadFile;
    	}
    
    	public void setUploadFile(File uploadFile) {
    		this.uploadFile = uploadFile;
    	}
    
    	public String getUploadFileFileName() {
    		return uploadFileFileName;
    	}
    
    	public void setUploadFileFileName(String uploadFileFileName) {
    		this.uploadFileFileName = uploadFileFileName;
    	}
    
    	public String getUploadFileContentType() {
    		return uploadFileContentType;
    	}
    
    	public void setUploadFileContentType(String uploadFileContentType) {
    		this.uploadFileContentType = uploadFileContentType;
    	}
    
    	public String execute() {
    		ServletContext servletContext = ServletActionContext.getServletContext();
    		String desdir = servletContext.getRealPath("/UploadFiles/" + uploadFileFileName);
    		FileInputStream fis = null;
    		FileOutputStream fos = null;
    		try {
    			fis = new FileInputStream(uploadFile);
    			fos = new FileOutputStream(desdir);
    			byte[] buffer = new byte[1024];
    			int len = 0;
    			while ((len = fis.read(buffer)) > 0) {
    				fos.write(buffer, 0, len);
    			}
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				fis.close();
    				fos.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    		return SUCCESS;
    	}
    }
    
    struts.xml 配置文件:

    <!DOCTYPE struts PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
              "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
        <package name="com" extends="struts-default">
            <action name="upload" class="com.elgin.action.UploadAction">
               <result name="success">/success.jsp</result>
            </action>
        </package>
    </struts>
    ④  如果在文件上传时需要增加相关限制条件,如文件大小、类型以及扩展名 ,可以通过给 FileUpload 拦截器配置参数来实现

          FileUpload拦截器有3 个属性可以设置.
            –maximumSize:传单个文件的最大长度(以字节为单位),默认值为 2 MB
           –allowedTypes:允许上传文件的类型, 各类型之间以逗号分隔
           –allowedExtensions:允许上传文件扩展名, 各扩展名之间以逗号分隔
           –可以在 struts.xml文件中覆盖这 3 个属性
    <!DOCTYPE struts PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
              "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
        
        <package name="com" extends="struts-default">
        
            <interceptors >
              <interceptor-stack name="fileLimit">
    	         <interceptor-ref name="defaultStack">
    	               <!-- 允许上传的最大文件大小 -->
    	               <param name="fileUpload.maximumSize">1048576</param>
    	               <!-- 允许上传的文件类型 -->
    	               <param name="fileUpload.allowedTypes">text/html,application/msword</param>
    	               <!-- 允许上传的文件扩展名 -->
    	               <param name="fileUpload.allowedExtensions">html,xml,doc</param>
    	           </interceptor-ref>
              </interceptor-stack>
            </interceptors>
            
            <default-interceptor-ref name="fileLimit"></default-interceptor-ref>
            
            <action name="upload" class="com.elgin.action.UploadAction">
               <result name="success">/success.jsp</result>
               <result name="input">/uploadFile.jsp</result>
            </action>
            
        </package>
    </struts>
    并且可以在国际化资源文件中定制错误消息:

    struts.messages.error.uploading - 文件上传出错的消息
    struts.messages.error.file.too.large - 文件超过最大值的消息
    struts.messages.error.content.type.not.allowed - 文件内容类型不合法的消息
    struts.messages.error.file.extension.not.allowed - 文件扩展名不合法的消息
    问题: 此种方式定制的消息并不完善. 可以参考 org.apache.struts2 下的 struts-messages.properties, 可以提供更多的定制信息.

    注意: 在 org.apache.struts2 下的 default.properties 中有对上传的文件总的大小的限制. 可以使用常量的方式来修改该限制
    struts.multipart.maxSize=2097152

  • 相关阅读:
    递归删除指定目录下的 .git 文件
    mina 字节数组编解码器的写法 I
    爬取大众点评
    使用Scrapy抓取数据
    Redis:默认配置文件redis.conf详解
    Redis:五种数据类型的简单增删改查
    使用python-docx生成Word文档
    IT部门域事件与业务分析
    因为说比做容易,所以要少说慎说
    主要问题
  • 原文地址:https://www.cnblogs.com/elgin-seth/p/5293735.html
Copyright © 2011-2022 走看看