2017-08-27 169 views
3

我想在我的控制器中使用ajax发送文件数据,但它不起作用。 下面是代码结构;上传文件是空的Laravel 5.4

形式

<form id="contact_img" enctype="multipart/form-data"> 
     <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
     <input id="contact_image" name="contact_image" type="file" class="file"> 
     <input type="text" class="form-control" name="testtest" id="testtest" required> 
     <button type="submit" class="btn-default">Save</button> 
    </form> 

AJAX

$.ajax({ 
     url: "{{ url('/') }}/admin/upload_contact_img", 
     data: $("#contact_img").serialize(), 
     success: function (data) { 
      alert(data); 
      location.reload(); 
     }, 
    }); 

我的网络路由

路线::获得( '管理/ upload_contact_img', 'admin_controller @ contact_img_upload');

控制器

public function contact_img_upload(Request $form){ 
    if ($form->hasFile('contact_image')){ 
     echo $form->file('contact_image'); 

    }else{ 
     echo "empty"; 
    } 
    echo $form->testtest; 
} 

只有输入TESTTEST显示该值。

+1

的可能的复制[如何使用FORMDATA为Ajax文件上传(https://stackoverflow.com/questions/21044798/how-to-use -formdata换AJAX文件上传) –

回答

0

尝试使用formData()代替序列化表单。

$("#contact_img").on('submit', function(e){ 
     e.preventDefault(); 
     var form = new FormData(e.target)   
     $.ajax({ 
     url: "{{ url('/') }}/admin/upload_contact_img", 
     data : form, 
     processData: false, // tell jQuery not to process the data 
     contentType: false, // tell jQuery not to set contentType 
     success: function (data) { 
      alert(data); 
     }, 
     type:'POST' 
    }); 
    }); 

见例如https://jsfiddle.net/cihkem/hk7u9kLf/

0

1)添加id形式提交按钮

<form id="contact_img" enctype="multipart/form-data"> 
    <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
    <input id="contact_image" name="contact_image" type="file" class="file"> 
    <input type="text" class="form-control" name="testtest" id="testtest" required> 
    <button type="submit" id="submitBtn" class="btn-default">Save</button> 
</form> 

2)阿贾克斯

jQuery(document).ready(function($){ 

    $("#submitBtn").click(function(e) { 

     e.preventDefault(); 
     var contact_image = $("#contact_image").prop("files")[0]; 
     var testtest = $("#testtest").val(); 
     var form_data = new FormData(); 
     form_data.append("contact_image", contact_image); 
     form_data.append("testtest", testtest); 

     $.ajax({ 
      url: './admin/upload_contact_img', 
      type: "POST", 
      data: form_data, 
      dataType: 'json', 
      cache: false, 
      contentType: false, 
      processData: false, 
      success: function(data){ 
       console.log(data.contact_image); 
       console.log(data.testtest); 
      }, 
      error:function(error){ 
       console.log('Something went wrong'); 
      } 
     }); 
    }); 

}); 

3)内部controller

public function contact_img_upload(Request $form){ 
{ 
    if($form->hasFile('image')) { 
     $image = $form->file('image'); 

     //Image handling code // 
    } 

    $testtest = $form->testtest; 
    return response()->json(['contact_image' => $image, 'testtest' => $testtest]); 
} 

如果你需要一个示范项目,只是克隆此项目Laravel-BoilerPlate-Template