没有struts标签的struts 2文件上传

时间:2013-05-18 00:18:19

标签: java jsp file-upload struts2 struts-action

我是否需要使用struts标签

<s:form action="doUpload" method="post" enctype="multipart/form-data">
    <s:file name="upload" label="File"/>
    <s:submit/>
</s:form>

利用struts 2提供的File upload功能?没有struts 2标签,我可以实现相同的功能吗?如果是,我是否可以知道需要将约定纳入操作或配置文件中以实现相同的目标?

2 个答案:

答案 0 :(得分:1)

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

如果您使用<form标记,则应将action属性值放在映射到该操作的路径中。有关动作映射器如何工作的详细信息,并将路径转换为ActionMapping,请参阅here

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

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

如果您需要上传多个文件,则应更改属性类型以便能够处理对象集合。看起来就像在example中完成的那样。

答案 1 :(得分:0)

你可以使用offcorse,你可以使用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
        }
         }

}