将Blob对象保存为服务器上的文件

and*_*der 4 php jquery blob magento

使用名为cropper的jQuery插件,我能够将裁剪后的图像检索为blob对象.现在我需要将这个blob对象保存为我服务器上的文件.代码是:

$('#image').cropper('getCroppedCanvas').toBlob(function (blob) {
    var formData = new FormData();

    formData.append('croppedImage', blob);
    formData.append('form_key', window.FORM_KEY);

    $.ajax('/upload.php', {
        method: "POST",
        data: formData,
        processData: false,
        contentType: false,
        success: function (data) {
            console.log(data);
        },
        error: function (data) {
            console.log(data);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

这是我的upload.php:

<?php
$blob = $_POST['croppedImage'];
//return $blob;
file_put_contents('/media/crop_products/test.png', $blob);
?>
Run Code Online (Sandbox Code Playgroud)

它不是保存在服务器上.我在这里做什么?此请求来自magento的管理页面.

Ale*_*tan 5

由于您要发送数据contentType:false,因此可以访问$_FILES,而不是$_POST.

评论交流证实了这一点.

你的$_FILES阵列是(根据评论):

[_FILES] => Array ( 
    [file] => Array ( 
        [name] => blob 
        [type] => image/png 
        [tmp_name] => /tmp/phpC9g8rU 
        [error] => 0 
        [size] => 1062301 
    ) 
)
Run Code Online (Sandbox Code Playgroud)

要上传它:

move_uploaded_file(
    $_FILES['file']['tmp_name'], 
    $_SERVER['DOCUMENT_ROOT'] . "/media/crop_products/test.png"
); 
Run Code Online (Sandbox Code Playgroud)

注意:move_uploaded_file需要一个完整路径作为第二个参数(目标位置),并且该文件夹应该是可写的.