Struts2文件上传

Struts2文件上传

@(Struts2)[upload,文件上传]

  • Struts2文件上传
    • 文件上传要素
    • Struts2实现文件上传
    • Struts上传工具类
    • 使用方式
    • 显示页面
    • 配置上传文件限制

文件上传要素

  • 表单提交的方式必须是POST
  • 表单中必须有表单元素:
  • 表单的enctype属性必须是multipart/form-data

Struts2实现文件上传

案例:
- 字符串类型代表文件名称
- 表单中上传项属性名+FileName
- private String uploadFileName;
- 字符串类型代表文件类型
- 表单中上传项属性名+ContentType
- private String uploadContentType;
- 文件类型代表上传文件
- 表单中上传项属性名
- private File upload;

PS:注意,要提供相应的set方法。

Struts上传工具类

package com.pc.crm.utils;

import java.util.UUID;

/**
 * Struts2上传工具类
 * 
 * @author Switch
 * @data 2016年11月30日
 * @version V1.0
 */
public class UploadUtils {
    /**
     * 获取唯一的文件名
     * 
     * @param fileName
     * @return
     */
    public static String getUUIDFileName(String fileName) {
        int extindx = fileName.lastIndexOf(".");
        String extention = fileName.substring(extindx);
        return UUID.randomUUID().toString().replace("-", "") + extention;
    }

    /**
     * 文件分离算法
     * 
     * @param uuidFileName
     * @return
     */
    public static String getDir(String uuidFileName) {
        // 获取唯一字符串的hashCode
        int code1 = uuidFileName.hashCode();
        // 获取一级目录
        int d1 = code1 & 0xf;
        // 右移4位
        int code2 = code1 >>> 4;
        // 获取耳机目录
        int d2 = code2 & 0xf;
        return "/" + d1 + "/" + d2;
    }
}

使用方式

public String add() throws IOException {
    if(upload != null) {
        // 设置目录,这里使用文件系统
        String rootDir = "G://uploads";
        // 将获取到的文件名处理成唯一文件名
        String uuidFileName = UploadUtils.getUUIDFileName(uploadFileName);
        // 根据唯一文件名获取二级子目录
        String childDir = UploadUtils.getDir(uuidFileName);

        File dir = new File(rootDir + childDir);
        if(!dir.exists()) {
            // 创建目录
            dir.mkdirs();
        }
        String realPath = rootDir + childDir + "/" + uuidFileName;
        // 创建文件
        File file = new File(realPath);

        // 文件上传
        FileUtils.copyFile(upload, file);
        // 设置文件上传路径
        customer.setCustImage(realPath);
    }

    // 保存客户
    customerService.save(customer);

    // 重定向到客户列表Action
    return "listAction";
}

显示页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>

<html>
    <head>
        <TITLE>添加客户TITLE> 
        <meta charset="UTF-8">
    HEAD>
<BODY>
    <%-- 字段错误回显 --%>
    <s:fielderror/>
    <s:form id="form1" name="form1" action="customer_add" namespace="/customer" method="post" enctype="multipart/form-data">
        <TR>
            <td>资质图片 :td>
            <td colspan="3">
                <input type="file" name="upload"/>
            td>
        TR>
        <tr>
            <td rowspan=2>
                <INPUT class=button id=sButton2 type=submit value=" 保存 ">
            td>

        tr>
    s:form>
BODY>
HTML>

配置上传文件限制

配置常量,相关属性可以在default.properties文件里找到


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

配置拦截器,相关属性可以在struts-default.xml文件里找到

<interceptor-ref name="defaultStack">
    
    <param name="fileUpload.maximumSize">2097152param>
    
    <param name="fileUpload.allowedExtensions">.jpgparam>
interceptor-ref>

你可能感兴趣的:(Struts2)