当前位置: 首页 > 知识库问答 >
问题:

Struts2:如何使用拦截器上传文件?

拓拔奇
2023-03-14

我尝试使用Struts2上传文件(图像)。但是,我的文件、文件内容和文件名类型的值为空!我试图寻找这个问题,但没有任何结果。

这就是我想做的:

jsp:

 <s:form id="registerSubmit" method="post" enctype="multipart/form-data" theme="bootstrap">

<s:textfield name="tel" cssClass="form-control" label="tel :"></s:textfield>

<label for="myFile">Upload your file</label>
<input type="file" name="file" />

<button type="submit" id="submit" > Enregistrer</button>
</s:form>

行动:

 public class Gestion extends ActionSupport implements  SessionAware, ModelDriven{

        private Visit c;
        private Service Service;
        private Long tel;
        private File file;
        private String fileContentType;
        private String fileFileName;

            public String addvisit(){

                c = new visit();
                Service = new ServiceImpl();            
                c.setTel(tel);
                System.out.println(fileContentType); //null
                System.out.println(fileFileName); //null
                byte[] bFile = null;
                if(file != null)
                    bFile = new byte[(int) file.length()]; 
                c.setPhoto(bFile); // null

                Service.add(c);



        return "success";

            }
     //setters and getters

    }

struts.xml

<struts>
 <constant name="struts.devMode" value="true" />
   <constant name="struts.multipart.maxSize" value="10000000" /> 

    <package name="login" extends="struts-default" namespace="/">

    <action name="addvisit" class="action.Gestion"
            method="addvisit">
               <interceptor-ref name="fileUpload">
                <param name="maximumSize">2097152</param>
                <param name="allowedTypes">
                    image/png,image/gif,image/jpeg,image/pjpeg
                </param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success" type="json" >
                    <param name="root">map</param>
            </result>
        </action>
</package>
</struts>

共有1个答案

欧阳安晏
2023-03-14

您没有指向表单中的任何位置的操作。

我还建议您尽可能使用(自封闭)Struts标记:

<s:form action="addvisit" id="registerSubmit" method="post" 
        enctype="multipart/form-data" theme="bootstrap">
    <s:textfield name="tel" cssClass="form-control" label="tel :" />
    <s:file name="file" label="Upload your file" />
    <s:submit id="submit" value="Enregistrer" />
</s:form>

也就是说,您的错误99%与模型驱动有关。删除模型驱动接口实现,或将堆栈配置为在模型驱动拦截器之后具有文件上传拦截器,就像在默认堆栈中一样(您实际上使用了两次文件上传拦截器):

<action name="addvisit" class="action.Gestion" method="addvisit">

    <interceptor-ref name="defaultStack">
        <param name="fileUpload.maximumSize">2097152</param>
        <param name="fileUpload.allowedTypes">
            image/png,image/gif,image/jpeg,image/pjpeg
        </param>            
    </interceptor-ref>

    <result name="success" type="json" >
            <param name="root">map</param>
    </result>
</action>
 类似资料:
  • 主要内容:Struts2框架的拦截器:,如何使用拦截器?,创建自定义的拦截器,创建拦截器类:,创建动作类:,创建视图,创建页面:,配置文件,堆叠多个拦截器:拦截器的概念是Servlet过滤器或JDK代理类一样的。拦截器允许横切功能分开实现的动作,以及框架。使用拦截器,可以实现如下: 提供预处理行动之前被称为逻辑。 提供后处理逻辑动作后被调用 捕获异常,这样可以进行替代处理。 Struts2框架提供的许多功能都使用拦截实现的例子包括异常处理,文件上传,生命周期回调和验证等事实上作为Struts2的

  • 主要内容:1. 动作,2. JSP页面,3. 执行和等待拦截器,4. 示例,参考在Struts2中附带一个名为“execAndWait”一个非常有趣的“执行和等待”拦截器,这是一个非常方便的拦截器长时间运行操作在后台,显示用户的自定义的等待页面。在本教程中,它显示了一个完整的使用 Struts2 execAndWait 拦截器的例子。 1. 动作 一个普通的动作类,有一个长时间运行进程,证明了execAndWait效果。 LongProcessAction.java 2. J

  • 本文向大家介绍详解Struts2拦截器机制,包括了详解Struts2拦截器机制的使用技巧和注意事项,需要的朋友参考一下 Struts2的核心在于它复杂的拦截器,几乎70%的工作都是由拦截器完成的。比如我们之前用于将上传的文件对应于action实例中的三个属性的fileUpload拦截器,还有用于将表单页面的http请求参数设置成action中对应的属性的param拦截器等。总之,在整个Struts

  • 主要内容:参考很多时候,相同的一组拦截器可以适用于不同的动作类,例如, 在上述情况下,它有许多重复工作以及不能重复使用。 幸运的是,在Struts 2自带的拦截器栈,使开发人员建立一组拦截到一个单元名为“栈名字”, 和可以通过“栈名字”引用操作它。 最佳做法 建议组合相同的一组拦截器到一个拦截器栈摆脱重复的工作,并增加了项目的可重用性。 在上面的例子更新,声明一个拦截器栈,命名为“defaultStackWit

  • 主要内容:参考在Struts2中,可以设置或通过普通的<param>标签重写拦截器的参数。见下面的例子: 然而,在上面的代码片段,动作类被声明为自己的拦截器, 它会导致继承“defaultStack”拦截器的直接丢失。 如果你想保持“defaultStack”拦截器,并覆盖工作流的excludeMethods参数呢?没问题,试试这个: 上面的代码片段将保持“defaultStack”拦截并覆盖“workflow

  • 我一直在阅读Struts2文档中的,它讨论了如何将StoreInterceptor添加到中的操作定义中,并且它很管用。但如果您要从操作中创建和添加,则情况就是如此。 我的问题是,我正在使用进行登录,如果登录失败,它将添加一个,如下所示: 它添加得很好,但当我进入在之后调用的LoginAction时,为。 我认为通过像这样添加,它将在请求或会话中存储(使用或参数): 但不管用。我还尝试将直接添加到d