我正在做一个ajax弹出窗口将图像上传到文件系统中。图片上传过程包括以下步骤..
<img>
标签src中作为Base64代码。这是代码......
$(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']);
}
并且错误消息是..
消息:未定义的索引:图片
答案 0 :(得分:2)
请看我的回答..
$(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);
}
你可以使用formData append.decode直接通过ajax传递Base64图像内容base64内容并将其放在file_put_contents()函数中。
答案 1 :(得分:0)
我认为问题在于您想将上传的图像转换为base64字符串,然后您想通过ajax将此字符串传递给控制器..它是兄弟..
答案 2 :(得分:0)
我也遇到了这个问题。所以首先在你的表单中取一个隐藏字段并给出hiddenfield的id和value,因为隐藏字段的值是转换后的字符串。然后你可以轻松地将hiddenfield的值即base64字符串变为变量在js by getElementById然后将变量传递给控制器..你可以通过$ _POST [&#39; id of hiddenfield&#39;]访问。然后你可以通过save()直接将值存储到数据库中。
答案 3 :(得分:0)
是的,不需要将base64转换为string..base64返回字符串,所以你将这个字符串用于hiddenfield的值。