【问题标题】:Struts2 : How to upload file using intercepter?Struts2:如何使用拦截器上传文件?
【发布时间】:2014-05-21 09:54:45
【问题描述】:

我尝试使用 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>

【问题讨论】:

  • 感谢 Roman,我添加了 jars(commons fileupload 和 commons io)而不是“Deployment Assembly”,但我仍然有一个空值!
  • 您可能没有读到最佳答案。
  • 最佳答案是什么?
  • 我删除了 并添加了 ,但没有任何结果,请罗马先生帮忙!跨度>

标签: jsp twitter-bootstrap struts2 upload interceptor


【解决方案1】:

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

我还建议您尽可能使用(自封闭)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% 与 ModelDriven 相关。要么删除 ModelDriven 接口实现,要么将堆栈配置为在 ModelDriven 之后具有 FileUpload 拦截器,就像在默认堆栈中一样(您实际上使用的是 FileUpload 拦截器的两倍):

<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>

【讨论】:

  • 这不是你向我们展示的......而且它不会起作用。请添加缺少的 ajax 调用以获得更好的帮助,并考虑 jQuery 或类似的 AJAX 上传解决方案,或使用标准提交。
  • 即使我从提交按钮调用操作,我仍然有一个空值
  • 我认为错误是在拦截器调用中,因为当我使用没有模型驱动和ajax cal的简单表单时,我仍然遇到同样的问题!
  • 现在,我得到了 fileContentType 和 fileFileName 的值,但是当我尝试像这样将文件转换为 byte[] 时: byte[] bFile = new byte[(int) getFile().length( )];然后我设置它:c.setPhoto(bFile),它将空值放入数据库!任何建议请!
  • 哦...我读了您的without model driven and ajax cal,就像没有两者一样,而您的意思是without model driven and WITH ajax call...然后一切都清楚了。你可以看看这里顺便说一句:code.google.com/p/ajax-file-upload-struts2我没试过,但它似乎适合你的需要
猜你喜欢
  • 2018-05-04
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多