2

我是否需要使用 Struts 标签:

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

使用 Struts 2 提供的文件上传功能?

我可以在没有 Struts 2 标签的情况下实现相同的功能吗?如果是,我可以知道需要将约定合并到操作或配置文件中以实现相同的效果吗?

4

2 回答 2

1

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

如果您使用<form>标签,那么您应该将动作属性值与映射到动作的路径放在一起。更多关于动作映射器如何工作以及如何将路径转换为ActionMapper接口的信息。

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

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

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

于 2013-05-18T15:05:21.763 回答
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
        }
         }

}
于 2013-05-18T06:28:26.600 回答