如何检索图像BLOB从PHP中的jQuery的AJAX的formData
我正在做一个AJAX弹出窗口上传图像到文件系统。图像上传过程具有以下步骤。如何检索图像BLOB从PHP中的jQuery的AJAX的formData
- 选择文件并将其裁剪为所需的大小。
- 结果图像显示在
<img>
标签src中作为Base64代码。 - 转换的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 ..
消息:未定义指数:图片
请参阅我的回答..
$(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()函数。
我认为这个问题是你要上传的图片转换成的base64字符串,然后你想通过这串控制器通过AJAX ..是它的兄弟..
...我选择这种方法,因为通过ajax传递base64长字符串不适用。我错了吗? –
我也面临这个问题..首先在你的窗体中带一个隐藏的域,并给隐藏域的id和值作为隐藏域的值是转换的字符串。然后你可以很容易地获得隐藏域的值,即base64字符串到一个变量中js通过getElementById然后将该变量传递给控制器..您可以通过$ _POST ['hiddenfield'id]访问该变量。那么你可以直接通过save()将值存储到数据库中。
你可以通过点击编辑按钮来重新编辑你的第一个答案,而不是张贴另一个。 – user4419336
在这种情况下..你告诉将base64代码转换为字符串格式,然后传递给js..right? –
它的工作rajesh。谢谢!! –
是的,没有必要将base64转换为字符串..base64返回字符串,所以你用这个字符串来隐藏字段的值。
你能分享你的代码吗?图片字符串打破我想。 –
我想你必须**用户**方法:'POST'**而不是**方法:'GET'**如在控制器中试图从POST请求中获取数据 –
对不起,这只是一种打字error..i在你的ajax调用之前使用POST方法 –
请放一个'console.log(formData);'并让我们知道它说什么 –