在文件系统中存储时,Base64字符串损坏

我正在个人资料页面上。当用户单击图像时,允许他们提交文件。 我正在通过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。 ..

hubeihb 回答:在文件系统中存储时,Base64字符串损坏

我通过博客找到了https://davidwalsh.name/convert-image-data-uri-javascript

我要做的就是删除base64字符串开头的不必要文本。

,

要获取图像的base64,应删除data:image/png;base64,前缀。 另外,图片可能是png(例如,您也可以检查类型的有效性)。因此,您将拥有:

    $indexOfComma = strpos($image,',');
    $imageContent = substr($image,$indexOfComma);
    $imageType = substr($image,$indexOfComma);
    $imageType = str_replace(["data:image/",";base64,"],"",$imageType); 
    $decodedImage = base64_decode("$imageContent");
    //...
    $fullPath = "http://www.mywebsite.com/uploads/" . $name . "." . $imageType;
    $return = file_put_contents($name . "." . $imageType,$decodedImage);
本文链接:https://www.f2er.com/3142176.html

大家都在问