загрузка изображения в базу данных и папку с использованием ajax laravel 5.4

Я пытаюсь загрузить изображение в базу данных и папку, используя ajax и laravel, но я получаю сообщение об ошибке, например call to a member function getclientoriginalextension on string, и когда я добавляю значения в путь к изображению моего контроллера, они не приходят.

мой взгляд :

<form role="form" name="campaignForm" id="campaignForm" action="" method="post"  enctype="multipart/form-data">


    <input type="text" name="project_name" autocomplete="off" id="project_name" placeholder="Company name" class="form-control">

    <input type="text" name="website_url" id="website_url" autocomplete="off" placeholder="http://www.yourdomain.com" class="form-control">
    <input type="file" name="image" id="image" autocomplete="off" placeholder="" class="form-control">

    <input type="text" name="location" id="location" autocomplete="off" placeholder="Enter the location you want to target" class="form-control">

    <input type="text" name="group" id="group" autocomplete="off" placeholder="Group (optional)" class="form-control">
    <button type="submit" id="btn-save" value="add"  class="btn actionBtn btn-primary">
</form>

мой аякс:

$("#btn-save").click(function (e) {
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
        }
    })

    e.preventDefault(); 

    var formData = {
        project_name: $('#project_name').val(),
        website_url: $('#website_url').val(),
        location: $('#location').val(),
        group: $('#group').val(),

        image : $('#image').val(),
    }


    $.ajax({

        type: type,
        url: my_url,
        data: formData,
        dataType: 'json',
        success: function (data) {
            console.log(data);

        },
        error: function (data) {
            console.log('Error:', data);
        }
    });
});

контроллер:

    public function campaign(Request $request){


    $task = new projects();

    $task->project_name = trim($request->project_name);
    $task->website_url = trim($request->website_url);
    $task->location = trim($request->location);
    $task->group = trim($request->group);


    $file = trim($request->image);

    if ($request->hasFile($file)) {
    $destinationPath = 'images'; // upload path
    $extension = $file->getClientOriginalExtension(); // getting image extension
    $fileName = rand(11111,99999).'.'.$extension; // renameing image
    $file->move($destinationPath, $fileName);

    $task->image = $fileName; 
  }   

  dd($task);

}

любая помощь будет оценена. Спасибо.


person Harshitha    schedule 17.02.2017    source источник


Ответы (1)


Похоже, Laravel не получает загруженное изображение. $request->image должен быть экземпляром класса UploadedFile, но в вашем случае это просто строка типа "C:\fakepath\custom-image.jpg"

Уважая этот ответ, попробуйте следующее:

$("#btn-save").click(function (e) {
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
        }
    });

    e.preventDefault();

    var form = document.forms.namedItem("campaignForm"); // high importance!, here you need change "yourformname" with the name of your form
    var formData = new FormData(form); // high importance!

    $.ajax({
        type: type,
        url: my_url,
        dataType: "json", // or html if you want...
        contentType: false, // high importance!
        data: formData, // high importance!
        processData: false, // high importance!
        success: function (data) {
            console.log(data);

        },
        error: function (data) {
            console.log('Error:', data);
        }
    });
});
person Petr Reshetin    schedule 17.02.2017
comment
Он работал для вставки данных. Но когда я пытаюсь отредактировать форму, она сохраняется как пустые значения. Я не понимаю, почему? - person Harshitha; 17.02.2017
comment
я рад, что это сработало. вы имеете в виду редактирование существующего экземпляра? хорошо, в этом случае вы можете поместить old('username') в поля формы, например <input type="text" name="username" value="{{ old('username') }}">. Вот старые входные документы - person Petr Reshetin; 17.02.2017
comment
Я разобрался с проблемой. Теперь все работает как часы. Спасибо :) - person Harshitha; 17.02.2017
comment
у меня есть еще одна проблема здесь. если я использую такие данные формы, я не получаю все выбранные значения из раскрывающегося списка. Есть ли какое-нибудь решение для него? - person Harshitha; 20.02.2017
comment
@HarshithaNaidu, хорошо, можно попытаться повысить ценность через formData.append(name, value); Вот источник документы - person Petr Reshetin; 20.02.2017
comment
Даже это не работало. Есть ли какое-либо альтернативное решение для этого? или я могу отправить два параметра в форме данных? - person Harshitha; 20.02.2017
comment
я думаю, да, вы можете попробовать отправить два параметра в форме данных - person Petr Reshetin; 20.02.2017
comment
Да, конечно, позвольте мне попробовать даже это - person Harshitha; 20.02.2017