2016-09-21 2 views
0

Я делаю всплывающее окно ajax для загрузки изображения в файловую систему. Процесс загрузки изображения имеет следующие этапы.Как получить изображение BLOB из formData jquery ajax в php

  1. Выбор файла и обрезка его до нужного размера.
  2. результат изображения отображается в <img> тег src в качестве кода Base64.
  3. преобразование Base64 в Blob, чтобы отправить через AJAX

Вот код ...

$(document).ready(function(){ 
     $('#btn_save').on('click', function() { 
      var PaymentStatus = $("#PaymentStatus").val(); 
      var image = $('#image-id').val(); 

      var base64ImageContent = image.replace(/^data:image\/(png|jpg);base64,/, ""); 
      var blob = base64ToBlob(base64ImageContent, 'image/png'); 
      var formData = new FormData(); 
      formData.append('picture', blob); 
      formData.append('PaymentStatus', PaymentStatus); 
      $.ajax({ 
        data: formData, 
        url:"/login/advshop/add", 
        method: 'GET', 
        processData: false, 
        contentType: false, 
        success: function (result) { 
         alert("form submitted"); 
       }, 
       error: function (result) { 
         alert('error'); 
         //alert(result); 
       } 
     }); 
    }); 
}); 

, но я не могу получить данные в мой контроллер ..

public function add() { 
    print_r($_POST['picture']); 
} 

и сообщение об ошибке есть ..

Сообщение: Undefined индекс: фото

+0

Я думаю, что вы должны использовать ** метод: «POST» ** вместо ** метода: «GET» **, как в контроллере, вы пытаетесь получить данные из запроса POST –

+0

Прошу прощения, что это была всего лишь типизация error..i использовал метод POST –

+0

перед вашим вызовом ajax, пожалуйста, поставьте 'console.log (formData);' и сообщите нам, что он говорит –

ответ

1

смотрите мой ответ ..

 $(document).ready(function() { 


     $('#btn_save').on('click', function() { 
      var image = $('#image-id').val(); 
      var base64ImageContent = image.replace(/^data:image\/(png|jpg);base64,/, ""); 
      var PaymentStatus = $("#PaymentStatus").val(); 
      var formData = new FormData(); 
      formData.append('image', base64ImageContent); 
      formData.append('PaymentStatus', PaymentStatus); 



      $.ajax({ 
       data: formData, 
       url: "/login/advshop/add", 
       method: 'POST', 
       processData: false, 
       contentType: false, 
       success: function (result) { 
        alert("form submitted"); 
       }, 
       error: function (result) { 
        alert('error'); 
        //alert(result); 

       } 
      }); 
     }); 
    }) 

В контроллере.

public function add() { 


     $data = base64_decode($_POST['image']); 


     file_put_contents('images/test.jpg', $data); 
    } 

вы можете напрямую передавать содержание изображения Base64 с помощью AJAX с помощью FormData append.decode содержания base64 и положили его в file_put_contents() функцию.

0

я думаю, что проблема в том, что вы хотите конвертировать загруженное изображение в base64 строку, а затем вы хотите передать эту строку в контроллер с помощью Ajax ..is его брат ..

+0

точно ... я выбираю этот метод, потому что прохождение base64 длинной строки через ajax не применимо. Я ошибаюсь? –

0

Я тоже столкнулся с этой проблемой. Сначала возьмите скрытое поле в своей форме и дайте id и значение для скрытого поля, так как значение скрытого поля - это преобразованная строка. Затем вы можете легко получить значение hiddenfield ie base64 string в переменной в js by getElementById, то передайте переменную контроллеру. Там вы можете получить доступ через $ _POST ['id of hiddenfield']. то вы можете сохранить значение в базе данных напрямую с помощью функции save().

+0

Вы можете отредактировать, нажав кнопку «Изменить», ваш первый ответ, а затем разместите еще один. – user4419336

+0

В этом случае ... вы говорите, чтобы преобразовать base64-код в строковый формат, а затем перейти к js..right? –

+0

работает раджеш. Спасибо!! –

0

Да, нет необходимости преобразовывать base64 в строку..base64 возвращает строку, поэтому вы используете эту строку для значения скрытого поля.

+0

можете поделиться своим кодом? я думаю, что сломанная строка изображения. –

Смежные вопросы