【发布时间】:2016-04-18 15:11:40
【问题描述】:
我有这个 HTML 表单:
<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 开发工具中看到通过 Request payload 发送的文件:
------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;
我能做什么?
谢谢
【问题讨论】:
-
你在问你能做什么?您可以问自己为什么尝试通过常规输入法获取文件。在普通的 PHP 中,文件也是一种特殊的输入,它有自己的数组 (
$_FILES),这在 Laravel 中没有什么不同。 laravel.com/docs/5.2/requests#files -
当我做 print_r($_POST); print_r($_FILES);它还显示了两个空数组。正如我所说,问题不仅出在文件中,输入字段也为空
标签: php jquery ajax laravel file-upload