【问题标题】:Saving Blob Object As a File On Server将 Blob 对象另存为服务器上的文件
【发布时间】:2016-07-02 19:52:14
【问题描述】:

使用名为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);
        }
    });
});

这是我的upload.php:

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

它没有保存在服务器上。我在这里是什么东东?这个请求是从 magento 的管理页面发出的。

【问题讨论】:

  • 您是否检查了该路径的权限?错误日志中有任何内容吗?
  • 另外,contentType:false 用于 multipart/form-data 表单发送文件。看$_FILES
  • 是的,错误文件中没有任何内容。权限也是正确的
  • 文件正在保存但它是空的,我是否正确读取 blob 对象?
  • 我打赌文件是创建的而不是保存的。在$blob = ... 之前运行$a = get_defined_vars();unset($a['GLOBALS'], $a['_ENV'], $a['_SERVER']);print_r($a); 并准确查看您发送的内容。

标签: php jquery magento blob


【解决方案1】:

由于您使用contentType:false 发送数据,因此可以在$_FILES 中访问它,而不是$_POST

评论交流证实了这一点。

您的$_FILES 数组是(根据 cmets):

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

上传:

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

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

【讨论】:

  • 非常感谢! $_FILES 数组是线索!
猜你喜欢
  • 2016-01-28
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2021-02-05
  • 2018-05-11
  • 2018-08-30
  • 1970-01-01
  • 2017-03-19
相关资源
最近更新 更多