Struts2框架的上传

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ip_JL/article/details/82774580

上传

上传文件对表单的要求:

1 表单要用post方式提交:

2 表单的enctype类型是"multipart/form-data"

3 表单中要有file类型的文本域

Struts2框架的上传也是基于拦截器, 底层还是使用commons-upload组件

单文件上传:

工程结构图:

UploadAction动作类:

package com.rl.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.ServletContext;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
    
    private String username;
    
    /**
     * input标签上传文件对应的name
     */
    private File upload;
    
    /**
     * 固定写法: 上传的文件的文件名
     */
    private String uploadFileName;
    
    /**
     * 固定写法: 获取上传文件的MIME类型, file属性名字的contentType
     */
    private String uploadContentType;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public File getUpload() {
        return upload;
    }

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

    public String getUploadFileName() {
        return uploadFileName;
    }

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

    public String getUploadContentType() {
        return uploadContentType;
    }

    public void setUploadContentType(String uploadContentType) {
        this.uploadContentType = uploadContentType;
    }
    
    public String upload() throws Exception{
        //获取application
        ServletContext sc = ServletActionContext.getServletContext();
        //获取服务器的绝对路径
        String realPath = sc.getRealPath("/");
        //组装上传文件的路径
        realPath = realPath + "upload\\"+uploadFileName;
        //获取输入输出流
        InputStream in = new FileInputStream(upload);
        OutputStream out = new FileOutputStream(realPath);
        int len = -1;
        byte[] bs = new byte[1024];
        while((len = in.read(bs)) != -1){
            out.write(bs, 0, len);
        }
        out.close();
        in.close();
        return SUCCESS;
    }
}

form.jsp表单:

扫描二维码关注公众号,回复: 3749264 查看本文章
<%@ 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">
</head>
<body>
<form action="${pageContext.request.contextPath }/upload/upload" enctype="multipart/form-data" method="post">
    姓名: <input type="text" name="username"><br>
    文件: <input type="file" name="upload"><br>
    <input type="submit" value="提交"><br>
</form>
</body>
</html>

结果:

查看部署目录下的upload是否已上传成功:

也可以将动作类中的上传文件的方法进行简化:

public String upload() throws Exception{
        //获取application
        ServletContext sc = ServletActionContext.getServletContext();
        //获取服务器的绝对路径
        String realPath = sc.getRealPath("/");
        //组装上传文件的路径
        realPath = realPath + "upload\\"+uploadFileName;
        
        FileUtils.copyFile(upload, new File(realPath));
        return SUCCESS;
    }

文件上传的验证(限制文件上传的类型和大小):

验证文件的类型:

struts.xml配置文件的动作类设置:

<action name="upload" class="com.rl.action.UploadAction" method="upload">
        <!-- 主动引用默认拦截器栈
         -->
            <interceptor-ref name="defaultStack">
            <!-- 设置参数"fileUpload.allowedExtensions"只允许".jpg"和".txt"格式的文件
             -->
                <param name="fileUpload.allowedExtensions">.jpg,.txt</param>
            </interceptor-ref>
            <result name="success">/success.jsp</result>
            <result name="input">/form.jsp</result>
        </action>

验证文件的大小:

默认的是2m, 修改struts.xml的常量配置:

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

此时上传大于1024000字节的则不成功

多文件上传:

只需要把接收的属性变成数组即可:

package com.rl.action;

import java.io.File;

import javax.servlet.ServletContext;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadsAction extends ActionSupport {
    
    private String username;
    
    private File[] upload;
    
    private String[] uploadFileName;
    
    private String[] uploadContentType;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public File[] getUpload() {
        return upload;
    }

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

    public String[] getUploadFileName() {
        return uploadFileName;
    }

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

    public String[] getUploadContentType() {
        return uploadContentType;
    }

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

    public String upload() throws Exception{
        ServletContext sc = ServletActionContext.getServletContext();
        for(int i = 0; i < upload.length; i++){
            String realPath = sc.getRealPath("/");
            realPath = realPath + "upload\\"+uploadFileName[i];
            FileUtils.copyFile(upload[i], new File(realPath));
        }
        return SUCCESS;
    }
}

form1.jsp表单:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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">
</head>
<body>
<s:fielderror></s:fielderror>
<s:actionerror/>
<form action="${pageContext.request.contextPath }/upload/uploads" enctype="multipart/form-data" method="post">
    姓名: <input type="text" name="username"><br>
    文件: <input type="file" name="upload"><br>
    <input type="file" name="upload"><br>
    <input type="file" name="upload"><br>
    <input type="submit" value="提交"><br>
</form>
</body>
</html>

查看是否上传成功:

猜你喜欢

转载自blog.csdn.net/ip_JL/article/details/82774580