上传文件我有这样的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;
我能做些什么?
感谢
你在问你能做什么?你可以问自己为什么你试图通过常规输入法来获取文件。在普通的PHP中,文件也是一种特殊的输入,它有自己的数组('_FILES'),这在Laravel中并没有什么不同。 https://laravel.com/docs/5.2/requests#files –
当我做print_r($ _ POST);的print_r($ _ FILES);它也显示了两个空阵列。正如我所说,问题不仅在文件中,也在输入字段变空 – Nir