我正在尝试使用带有jquery的AJAX从我的页面发送jpg图像到我的服务器,该服务器使用php脚本处理图像。我发送的图片如下:
function post_snapshot() {
var pic = document.getElementById('snapshot').src;
if(pic){
var jpic = JSON.stringify(pic);
$.ajax({
url:"picture",
data: jpic,
type: "PUT",
dataType: "json",
success: function(json){
console.log(json);
},
error: function(xhr, status, errorThrown){
console.log("Error: " + errorThrown);
console.log("Status " + status);
console.dir(xhr);
}
});
}
}
然后我用我的php脚本检索图像:
private function create_picture($name){
$putdata = fopen("php://input", "r"); // read pic into string
$picstr = "";
while ($data = fread($putdata, 1024))
$picstr = $picstr . $data;
fclose($putdata);
$picstr = base64_decode($picstr); // decode picture
if(!picstr){
echo json_encode(array("status" => "failed to decode image"));
return;
}
$source = imagecreatefromstring($picstr);
if(!$source){
echo json_encode(array("status" => "failed to create image"));
return;
} else {
if(!imagejpeg($source,"images/img" . date_timestamp_get(date_create()) . ".jpeg")){
echo json_encode(array("status" => "failed to save image"));
return;
} else {
echo json_encode(array("status" => "success"));
}
}
目前我收到“未能创建图像”消息,这意味着imagecreatefromstring()失败。
我怀疑它为什么不起作用是因为我在我的javascript中使用JSON.stringify,这可能与php的解码功能不太匹配。它也可能在于我如何使用jquery的AJAX调用。
我在php中打印出解码后的字符串只是为了看看它的样子:
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgDh[...]
有没有人看到任何明显的错误?
答案 0 :(得分:0)
您应该使用json_decode();
// read pic into string
$putdata = json_decode(fopen("php://input", "r"), true);
答案 1 :(得分:0)
我无法弄清楚为什么我的原始方法不起作用,但是我通过不同的方法让它工作。
我正在使用一个名为Webcam.js的小库,我在阅读文档时发现它有内置的上传功能。我使用上传功能并在php端获取发布的文件,一切正常!
move_uploaded_file($_FILES['webcam']['tmp_name'], "images/img".date_timestamp_get(date_create()) . ".jpg");