在struts中上传文件和一些数据

时间:2016-12-31 17:50:50

标签: file upload struts2

我想通过struts表单上传图像文件和一些数据,处理数据,并将该图像存储在DB中

我为它创建了一个表单,定义了在struts.xml文件中上传文件的操作,但是当控件进入java方法时,在File类型变量中得到null,请帮忙。

struts.xml中的

代码:

    <action name="uploadFile" class="org.ui.LogActivityAction"
        method="uploadFile">
        <interceptor-ref name="fileUpload">  
            <param name="fileUpload.maximumSize">10485760</param>
            <param name="fileUpload.allowedTypes">text/plain,image/jpg</param>
        </interceptor-ref>
        <interceptor-ref name="defaultStack"/>
        <result name="success">/user/activity/upload-card.jsp</result>
        <result name="error">/user/activity/upload-card.jsp</result>
    </action>

用于将数据发送到行动的ajax:

 function saveSalesUserActivity(card) {
     var isValidForm = jQuery('#dailyActivity').valid();
     isValidForm = jQuery('#dailyActivity').valid();
     if (!isValidForm) {
         return;
     }
     if (isValidForm) {
         jQuery.blockUI({
             message: "<strong>" + messages("mis.common.wait") + "</strong>"
         });
         jQuery.ajax({
             type: "POST",
             url: "/sales/user/logactivity/saveactivity.action?businessCard=" + card,
             data: jQuery('#dailyActivity').serialize(),
             success: function(response) {
                 jQuery("#miscontent").html(response);
             },
             error: function(response) {
                 jQuery("#miscontent").html(response);
             }
         });
         jQuery.unblockUI();
     }
     jQuery.unblockUI();
 }

通过这个到达java方法时,我没有得到文件类型变量的值(使用&#39; businessCard&#39;这里).. 任何人帮助..

2 个答案:

答案 0 :(得分:1)

如果你使用jQuery('#dailyActivity').serialize()
它不适用于<input type'file'>
看看这个jsFiddle 不起作用

和这一个.serialize()

  

来自文件选择元素的数据未被序列化。

要发送<input type'file'>,您可能需要尝试

var formData = new FormData($('form')[0]);

请查看此https://stackoverflow.com/a/8758614/3425489

答案 1 :(得分:0)

要使用jQuery上传文件,您必须使用formdata

文件上传的工作代码在

下面

$(document).on('click', '#upload', function(e) {
          e.preventDefault();
      var fd = new FormData();
      var file = $('#my_file')[0].files[0];
      fd.append('file', file);
      fd.append('userId', $('#userid').val());
      console.log("hi");
      $.ajax({
          url: 'UploadPic',
          data: fd,
          type: "POST",
          contentType: false,
          processData: false,
          success: function(dd) {
            alert("sucessfully Uploaded")
            }
          });
      });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" id="my_file">
<input type="hidden" id="userid" />
<input type="button" id="upload" value="Upload" />