2016-09-21 278 views
0

我正在做一个AJAX弹出窗口上传图像到文件系统。图像上传过程具有以下步骤。如何检索图像BLOB从PHP中的jQuery的AJAX的formData

  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']); 
} 

and the error message is ..

消息:未定义指数:图片

+0

我想你必须**用户**方法:'POST'**而不是**方法:'GET'**如在控制器中试图从POST请求中获取数据 –

+0

对不起,这只是一种打字error..i在你的ajax调用之前使用POST方法 –

+0

请放一个'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); 
    } 

您可以通过AJAX使用FORMDATA append.decode以base64内容直接传递Base64编码的图像内容,并把它放在file_put_contents()函数。

0

我认为这个问题是你要上传的图片转换成的base64字符串,然后你想通过这串控制器通过AJAX ..是它的兄弟..

+0

...我选择这种方法,因为通过ajax传递base64长字符串不适用。我错了吗? –

0

我也面临这个问题..首先在你的窗体中带一个隐藏的域,并给隐藏域的id和值作为隐藏域的值是转换的字符串。然后你可以很容易地获得隐藏域的值,即base64字符串到一个变量中js通过getElementById然后将该变量传递给控制器​​..您可以通过$ _POST ['hiddenfield'id]访问该变量。那么你可以直接通过save()将值存储到数据库中。

+0

你可以通过点击编辑按钮来重新编辑你的第一个答案,而不是张贴另一个。 – user4419336

+0

在这种情况下..你告诉将base64代码转换为字符串格式,然后传递给js..right? –

+0

它的工作rajesh。谢谢!! –

0

是的,没有必要将base64转换为字符串..base64返回字符串,所以你用这个字符串来隐藏字段的值。

+0

你能分享你的代码吗?图片字符串打破我想。 –

相关问题