2017-02-17 13 views
0

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

мой взгляд:

<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); 

} 

любая помощь была бы оценена Вы.

ответ

1

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

Дарит уважение к this answer, попробуйте следующее:

$("#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); 
     } 
    }); 
}); 
+0

Сво работал для вставки .Но данных, когда я пытаюсь редактировать формы, его сохранение в виде пустых значений. Я не понимаю, почему? – 06011991

+0

Я рад, что это сработало. вы имеете в виду редактирование существующего экземпляра? в этом случае вы можете поместить 'old ('username')' в поля формы, например this ' , Вот [старые входные документы] (https://laravel.com/docs/5.4/requests#old-input) –

+0

Я разобрался с проблемой. Теперь все работает как шарм. Спасибо :) – 06011991