PHP-读取BLOB文件的内容

时间:2018-07-02 18:08:15

标签: php blob

我上传了* .mp4视频,并使用JavaScript的new Blob()函数将其转换为Blob type。 我使用AJAX将此Blob发送到PHP。

现在,我想在PHP中阅读此Blob的内容。换句话说,我需要此Blob的二进制数据并将其存储到PHP variabele中。

但是,似乎无法使用PHP读取Blob文件,因为freadfopenfile_get_contents都失败了!在浏览器中打开Blob URL时,视频可以正常播放。

我的问题是,如何在不安装扩展程序/库的情况下使用PHP获取该Blob的二进制数据?

var_dump($_FILES['video']);
Array
(
    [name] => blob
    [type] => video/mp4
    [tmp_name] => C:\xampp\tmp\php43B8.tmp
    [size] => 58
    [error] => 0
)

// Try 1
if ($stream = fopen($_FILES['video']['tmp_name'], 'r')) {

    echo stream_get_contents($stream, filesize($_FILES['video']['tmp_name']));
    fclose($stream);
}

// Try 2
if ($fp = fopen($_FILES['video']['tmp_name'], 'r')) {
    echo fread($fp, filesize($_FILES['video']['tmp_name']));
    fclose($fp);
}

// Try 3
file_get_contents($_FILES['video']['tmp_name'])

结果始终为:blob:http://localhost/d53e40bd-686b-46c8-9e81-94789351466f

1 个答案:

答案 0 :(得分:0)

我知道这是一个较晚的答复,您可能已经解决了此问题,但是这是我为BLOB处理所做的事情。由于Blob已经上传到TEMP文件位置,因此我们首先使用PHP的move_uploaded_file函数将上传的文件移动到某个位置。从那里,您可以读取内容等,然后在处理完成后从服务器中删除文件。

这里有一个使用图像文件的非常基本的示例:

// Ajax data for posting the blob, remember to set process data to false
formData.append('code', 'uploadedImage');
formData.append('image', blob);
var url = "script.upload.php";
$.ajax({
    type: 'POST',
    url: url,
    data: formData,
    processData: false,
    contentType: false,
    success: function (data) {}
});


// PHP Code for uploading the file to the server
if ($_POST['code'] == "uploadedImage") {
    $data = $_FILES['image']['tmp_name'];
    move_uploaded_file($data, $_SERVER['DOCUMENT_ROOT'] . "/img/" . time() . ".png");
}

我们现在在基本目录/图像位置有一个1542839470.png之类的文件。现在,可以从此处读取,移动,流式传输,存储图像,无论如何。我正在使用一个名为Croppie的便捷插件来为寻找整洁工具的人调整图像大小,旋转和裁剪图像。通过先处理它们,我可以避免之后再对它们执行任何操作。在制作视频时,这不适用于您的特定情况,但对于做类似工作的人(例如我)来说,这是一个方便的插件。

完成文件处理后(通过卷曲YouTube API或对完成的文件进行任何处理),只需使用以下命令即可删除文件。从上方缓存视频或文件名和位置(只需通过设置位置$var即可完成操作)并将其输入此命令。

unlink("path_to_file_location"); //delete it