загрузка изображений laravel - ajax не публикует мой файл изображения

Я пытаюсь загрузить изображение из вызова ajax на свой сервер (на laravel).

Это мой серверный код:

if (Input::hasFile('flyer')){
    Log::info('WORK!');
    $file = Input::file('flyer');
    $file->move('uploads', $file->getClientOriginalName());
}

Как видите, я установил журнал, чтобы понять, был ли загружен мой файл или нет ... но мой файл журнала говорит, что это не так ...

Мой код формы:

{{ Form::open(array('url' => 'new_event', 'id' => 'newEvent', 'files' => true)) }}
    //some fields...
    {{ Form::file('flyer', array('class' => 'form-control', 'id'=>'inputImage')) }}
    // some other fields
{{ Form::close() }}

и вот мой вызов ajax:

$('#newEvent').submit(function() {
    $.ajax({
        data: $(this).serialize(),
        type: $(this).attr('method'),
        url: $(this).attr('action'),
        success: function(response) {
            $('#content').html(response);
        }
    });
    return false;
});

Наконец, вот мои пост-данные (из консоли разработчика google), когда я публикую свою форму:

_token:bqyiuQwtYEEs0tvhBcndi4ylsVPPi2FpYhGPLxKQ
title:sdfgsdf
description:sdfgsdf
activated_at:23/04/2015
expire_on:24/04/2015
contact:a name
phone:+387646
email:[email protected]
push:1

Как видите, от моего файла изображения (флаера) не осталось и следа ... почему?


person ciccioassenza    schedule 18.04.2015    source источник
comment
Лучше использовать jQuery-File-Upload.   -  person Hasib Mahmud    schedule 18.04.2015
comment
Кажется очень интересным, и, возможно, мне это понадобится для моей следующей функциональности ... но поскольку ответ K.Toress помогает, на данный момент я откладываю реализацию этой библиотеки. Спасибо вам и всему ТАК сообществу!   -  person ciccioassenza    schedule 18.04.2015


Ответы (1)


вы не можете отправить такое изображение, вам нужно enctype="multipart/form-data", попробуйте следующий код.

$('#newEvent').submit(function() {

    // need to get form data as below
    var formData = new FormData($(this)[0]);

    $.ajax({
        data: formData,
        contentType: false,
        processData: false,
        type: $(this).attr('method'),
        url: $(this).attr('action'),
        success: function(response) {
            $('#content').html(response);
        }
    });
    return false;
});
person Kalhan.Toress    schedule 18.04.2015
comment
Зачем вам писать $(this)[0] вместо просто this? - person Musa; 18.04.2015