您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

一次将多个文件上传到Struts2 @Action

一次将多个文件上传到Struts2 @Action

我建议您使用Struts标记而不是普通的HTML标记,并扩展ActionSupport(返回其Result常量,而不是手动组成结果字符串,例如“result”)。

就是说,这是一个

注意:它不适用于旧版本的IE,但是由于您在自己的问题中使用的是HTML5,所以我敢打赌,您已经知道它了,并且您没有针对旧的IE。

<%@page contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
    <head>
        <Meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Multiple File Upload Example</title>
    </head>
    <body>
        <s:form action="upload" enctype="multipart/form-data" >
            <s:file name="files" multiple="multiple" />
            <s:submit value="Upload files" />
        </s:form>
    </body>
</html>

关于这一multiple="multiple"部分的注意事项:即使在官方文档中,也<s:file />未定义该标记的属性,因为Struts 2.1允许使用该属性,因为

允许的动态属性

这意味着它将按 原样 在JSP上绘制,而不受Struts的干扰。这样,Struts不需要在每次HTML5提供新功能时都更新其标签。你可以把foo="bar"太多的标签,允许动态属性<s:file/><s:textarea />等等),你会发现它的HTML。

public class Upload extends ActionSupport{

    private List<File> files;
    private List<String> filesContentType;
    private List<String> filesFileName;

    /* GETTERS AND SETTERS */

    public String execute() throws Exception{
        System.out.print("\n\n---------------------------------------");
        int i=0;
        for (File file : files){
            System.out.print("\nFile ["+i+"] ");
            System.out.print("; name:"         + filesFileName.get(i));
            System.out.print("; contentType: " + filesContentType.get(i));
            System.out.print("; length: "      + file.length());
            i++;
        }
        System.out.println("\n---------------------------------------\n");
        return SUCCESS;
    }

}

然后,您可能需要设置 的 的 :

Struts.xml-最大分段大小:

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

Struts.xml-文件的最大大小(全局到软件包,或本地到Action)

<interceptor-ref name="fileUpload">
    <param name="maximumSize">10485760</param>
</interceptor-ref>
其他 2022/1/1 18:15:32 有562人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶