我正在个人资料页面上。当用户单击图像时,允许他们提交文件。 我正在通过javascript使用文件阅读器
$('#profileImage').click(function(){ $('#image-file').trigger('click'); });
$('#image-file').on('change',function(){
if (this.files && this.files[0]) {
var FR= new FileReader();
FR.readAsDataURL(this.files[0]);
FR.addEventListener("load",function(e) {
document.getElementById("profileImage").src = e.target.result;
imgData = e.target.result;
var formData = {
'name' : localStorage.getItem('email'),'image' : imgData
};
console.log("image data: " + imgData);
$.ajax({
type : 'POST',url : '/uploadprofile.php',data : formData,dataType: 'text',encode : true
}).done(function(data) {
console.log(data);
});
});
}
});
然后我有了一个处理base64图像字符串并将其保存到文件系统中的php脚本。
uploadprofile.php
if ($json == "") {
$name = $_POST['name'];
$image = $_POST['image'];
} else {
$name = $json["name"]; //within square bracket should be same as Utils.imageName & Utils.image
$image = $json["image"];
}
$response = array();
$decodedImage = base64_decode("$image");
//unlink old picture
// unlink($name.".jpg");
$oldName = $name;
$name .= date("D M d Y G:i");
$name = str_replace(' ','',$name);
$fullPath = "http://www.mywebsite.com/uploads/".$name.".jpg";
$return = file_put_contents("uploads/".$name.".jpg",$decodedImage);
if($return !== false){
$response['email'] = $oldName;
$response['image'] = $image;
$response['success'] = 1;
$response['message'] = "Image Uploaded Successfully";
$sql = "UPDATE Users SET PicLocation = '$fullPath' WHERE Email = '$oldName'";
$result = $conn->query($sql);
}else{
$response['success'] = 0;
$response['message'] = "Image Uploaded Failed";
}
echo json_encode($response);
问题是,将图片保存到文件系统后,无法查看该文件,或者该文件已损坏。无论我将其文件名用于src还是直接尝试从控制面板查看它,它都不可见。我注意到base64字符串的文件大小大约是图片大小的3倍,我不确定为什么会这样。
我需要怎么做才能将base64数据制成可读文件? $ decodedImage的值为false。如何从JavaScript发送正确的格式?
php中$image
的值开始如下:
数据:图像/ PNG; BASE64,iVBORw0KGgoaAAANSUhEUgAAAZIAAAMsCAYAAAB + 3STWAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAP + lSURBVHhe7J0HmFRF9vbZ8P92VyXnJnm00bDqrq6r7uqKgGnXCJIEJeeMZJCcs2REEcUsiJKDBBM5oyggSlIx5 / rOr7qruX3n9jAzdM / 09JzzPO8z0 / fWrRvq3vPWCVWV7w9 / + IO59NJLzZ / + + 9Cdz2223mRtuuMGUKfhs5M f35xzzjnmrLPOMv / 3F / 9nfvnLX5p8 + fIpFLkKv / jFL81vzypgfnd2wYTh // 327MBzKxTJjF / 84hfm17 / + tfnd735ndf3ZZ59t / 7 / QH / 8yzZo1M7fccotp06aNadu2rWnYsKFp36GD6b5qbyDy / fWvfzVXX3214e + dd95pLrnkElO4cBFbsSMSTsZJgy5GoUh2 / PKXvzK / + d055rcBJHBGEIL6f785S86h34Yi9wGdjoHwm9 / 8Jkrflypd1tsr39B07NjR1KtXzzz88MOmRYsWplnzFoEkAvL985 // tFbINddcY26 ++ WZTsUJFU7BAgUjFv / 3tb82vfvUrJRJFrscvf / Vr6RT9P / PR / ZTZ / ERQ + YUQVNB5FIrcAogEjxPWCF4o / kIst91 + T + ndu7e59957Tb9 + / UynTp1McyGTnj17BhPJrbfeam666Sbr1rrmH9eY0qVKm / xhEgFUqm4thUKhSD049xaWiAtn4N669LK / mZatWpkmTZpYQunTp49p3bq16dq9ezCR1K9f3 / ZNP / 8xd999t / nLXy42。 ..