2016-01-13 77 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