关于Struts2的多文件上传

之前写过一篇文章,关于Struts2文件上传:http://www.cnblogs.com/lichenwei/p/3927964.html

现在来说下多文件上传,其实就把上传文件当成是一个数组去处理,和单文件上传是一样的思路,直接贴一段代码:

uploads.jsp

复制代码
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!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=ISO-8859-1">
<title>上传文件示例</title>
</head>
<body>
<s:actionerror/>
<s:fielderror/>
<s:form action="uploads.action" theme="simple" namespace="/" method="post" enctype="multipart/form-data">
    <s:file label="上传文件:" name="upload"></s:file>
    <s:file label="上传文件:" name="upload"></s:file>
    <s:file label="上传文件:" name="upload"></s:file>
    <s:submit value="提交上传"></s:submit>
</s:form>
</body>
</html>
复制代码

 

UploadsAction.java

复制代码
package com.lcw.struts2.upload;

import java.io.File;
import java.io.IOException;

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

import com.opensymphony.xwork2.ActionSupport;

public class UploadsAction extends ActionSupport {
    // <s:file label="上传文件:" name="upload"></s:file>
    private File[] upload;// 命名应该和上传页面name属性值保持一致
    private String[] uploadContentType;// 属性值+ContentType
    private String[] uploadFileName;// 属性值+FielName

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

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

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

    public String upload() {

        for (int i = 0; i < upload.length; i++) {
            File destFile = new File(ServletActionContext.getServletContext()
                    .getRealPath("/uploads")
                    + "/" + uploadFileName[i]);
            try {
                // 工具类
                FileUtils.copyFile(upload[i], destFile);
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        return SUCCESS;
    }
}
复制代码

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>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.multipart.maxSize" value="20000000000"></constant>
    
    <!-- 全局国际化配置 -->
    <constant name="struts.custom.i18n.resources" value="messages"></constant>

    <package name="struts2test" extends="struts-default">
        <action name="uploads" class="com.lcw.struts2.upload.UploadsAction" method="upload">
            <result name="success">/index.jsp</result>
            <result name="input">/upload.jsp</result>
        </action>
    </package>

</struts>
复制代码

 

来看下效果图:

posted @   李晨玮  阅读(919)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示