无需Struts标签的Struts 2文件上传

问题描述 投票:0回答:2
java jsp file-upload struts2 struts-action
2个回答
1
投票

很快,是的,你可以。然后该操作使用的配置和约定保持不变。

如果您使用

<form>
标签,那么您应该将操作属性值与映射到该操作的路径一起放置。更多关于动作映射器如何工作以及如何将路径转换到
ActionMapper
界面

在表单标签中,您应该放置

enctype="multipart/form-data"
,以便 Struts 能够将
http
请求包装到
MultipartRequestWrapper
并解析表单数据。然后
fileUpload
拦截器
将参数添加到
params
拦截器
所需的操作上下文,以将文件属性注入到处理上传的操作中。

input
标签的名称应与属性
File
类型的名称相对应。上面的两个拦截器都使用它,最后通过 OGNL 注入对象。

如果您需要上传多个文件,那么您应该更改属性类型以能够处理对象集合。看起来像是在这个示例中完成的。


0
投票

当然可以,你可以使用 HTML 标签,

<s:form action="fileUploadAction" method="post" enctype="multipart/form-data">

   <input type="file" name="userImage" id="userImage"/> 

 </s:form>

你可以使用 struts2-inceptors 为你做这样的事情。

<interceptors>
            <interceptor name="mylogging"
                class="com.alw.controller.MyLoggingInterceptor">
            </interceptor>
            <interceptor-stack name="loggingStack">
                <interceptor-ref name="mylogging" />
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>
        </interceptors>

        <action name="fileUploadAction"
            class="xxx.xxx.FileUploadAction" method="filterUploadFile">
            <interceptor-ref name="fileUpload">
            <param name="maximumSize">2097152</param>

            </interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success">JSP_Pagesxxx.jsp</result/>
        </action>

要在您的操作类中执行业务逻辑,您需要这个。

public class FileUploadAction extends ActionSupport implements ServletRequestAware 
{
    private File userImage;
    private String userImageContentType;
    private String userImageFileName;

    public String filterUploadFile()
        {
        if(UserImageFileName()!=null)
        {

              // perform your business logic
        }
         }

}
© www.soinside.com 2019 - 2024. All rights reserved.