2016-01-13 83 views
0

上傳文件我有這樣的HTML表單:Laravel 5 - 用ajax

<form action="{{ route('send_form') }}" method="post" class="send_form" enctype="multipart/form-data"> 
     <input type="hidden" name="_token" class='token' value="{{ csrf_token() }}" /> 
     <input type="text" id="fullname" name="fullname" placeholder="" > 
     <input type="file" id="myfile" name="myfile" /> 
     <button>Send</button> 
</form> 

我特林通過AJAX上傳的文件在這究竟是爲什麼:

$(".send_form").submit(function(e) { 

    e.preventDefault(); 
    $this = $(this); 

    var $form = $(this), 
     url = $form.attr("action"); 

    $.ajax({ 
     url: url, //Server script to process data 
     type: 'POST', 
     headers: { 'X-CSRF-TOKEN':$form.find('.token').val() }, 
     // Form data 
     data: new FormData($form[0]), 
     cache: false, 
     contentType: 'json', 
     processData: false, 
     //Ajax events 
     success: function(data) { 
      conosle.log('yesss'); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      console.log(jqXHR, textStatus, errorThrown); 
     } 
    }); 

    return false; 
}); 

我可以看到該文件通過請求負載在Chrome開發者工具發送:

------WebKitFormBoundaryBXAYgtRKJjEyH6NP 
Content-Disposition: form-data; name="myfile"; filename="01.png" 
Content-Type: image/png 

在我Laravel控制器,我不能讓任何原因的輸入。 Input::all()返回空,Request::instance()->all()爲空,另外Input::get('fullname')爲空。

在我的控制器代碼的開始我有這一切:

namespace App\Http\Controllers; 

use App\Http\Requests; 

use Request; 
use Response; 
use Carbon\Carbon; 
use Illuminate\Support\Facades\Redirect; 
use Lang; 
use Validator; 
use Input; 

我能做些什麼?

感謝

+0

你在問你能做什麼?你可以問自己爲什麼你試圖通過常規輸入法來獲取文件。在普通的PHP中,文件也是一種特殊的輸入,它有自己的數組('_FILES'),這在Laravel中並沒有什麼不同。 https://laravel.com/docs/5.2/requests#files –

+0

當我做print_r($ _ POST);的print_r($ _ FILES);它也顯示了兩個空陣列。正如我所說,問題不僅在文件中,也在輸入字段變空 – Nir

回答

1

假設文件實際上被上傳(見下文),你不喜歡正常輸入訪問它。有一種訪問文件的特殊方法,稱爲file。所以\Request::instance()->file('myfile')是你想要的。

在沒有像Blueimp這樣的第三方回退的情況下進行AJAX文件上傳時要小心。它看起來像大多數現代瀏覽器現在支持它,但IE 8和9不支持,IE 10和11不支持responseType: 'json'。手機支持(Android 4.4及以下,Opera Mini)也受到限制。 (Source +一些有趣的bug修復)

+0

正如我所說,問題不僅在文件中,也是輸入字段爲空 – Nir