解码时base64_decode失败

时间:2017-05-23 16:40:34

标签: javascript php ajax base64

我尝试使用输入(文件)从用户的计算机发送图像。 我使用画布调整图像大小,然后获取通过画布的toDataURL方法编码的base64字符串。

然后我通过AJAX请求将编码的字符串发送到我的服务器。在PHP中,我正确地接收了POST数据,但是当我想使用base64_decode将编码的字符串保存到我的服务器上的文件中时它失败了。

客户端:

function upload_document(file){

    var url_post_document = "url_to_server";
    var type_img = file.type;
    var reader = new FileReader();

    reader.onload = function(evt){

    var image = document.createElement('img');
    image.onload = function (){ 

        var canvas = document.createElement('canvas');
        canvas.height = 40;
        canvas.width = 40;
        var ctx = canvas.getContext('2d');

        ctx.drawImage(this, 0, 0, 40, 40);

        var shrinked = canvas.toDataURL(file.type);
        //console.log(shrinked);

        $.ajax({
            url: url_post_document,
            type: 'POST',
            xhrFields: {
                withCredentials: false
            },  
            data: {
                "user_id": user_id,
                "image": shrinked,
                "image_type": type_img
            },
            success: function(data) {
                console.log("RESPONSE");
                console.log(data);
            },
            error: function() {
                console.log("----- FAIL -----");
            },
            complete: function() {
                console.log("----- REQUEST COMPLETED -----");
            }
        });
     };

     image.src = reader.result;

     };

    reader.readAsDataURL(file);
}

服务器端:

if(isset($_POST['user_id'])){

        $extension = explode('/', $_POST['image_type']);
        $extension = $extension[1];
        define('UPLOAD_DIR', WP_CONTENT_DIR.'/uploads/userthumb/');

        $imgBaseData = rtrim($_POST['image']);
        $img        = str_replace('data:'.$_POST['image_type'].';base64,', '', $imgBaseData);
        $img        = str_replace(' ', '+', $img);

        $baseimage  = base64_decode($img, true);
        return $baseimage;
}

我尝试复制并通过在线base64decoder上从toDataURL方法获取的base64字符串,它可以工作,显示图像。但在服务器上,无法解码字符串。

对此事我感激不尽。提前谢谢!

0 个答案:

没有答案