PHP - чтение содержимого файла BLOB - PullRequest
0 голосов
/ 02 июля 2018

Я загрузил видео * .mp4 и преобразовал его в Blob type, используя JavaScript new Blob () . Я отправляю этот BLOB-объект в PHP, используя AJAX.

Теперь я хочу прочитать содержимое этого BLOB-объекта внутри PHP. Другими словами, мне нужны двоичные данные этого BLOB-объекта и я хочу сохранить их в переменной PHP.

Тем не менее, кажется, что невозможно прочитать файл Blob с помощью PHP, поскольку fread, fopen и file_get_contents терпят неудачу во всех! Когда я открываю URL-адрес Blob в моем браузере, видео воспроизводится нормально.

Мой вопрос: как мне получить двоичные данные этого BLOB-объекта с помощью PHP без установки расширений / библиотек?

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 голосов
/ 19 октября 2018

Я знаю, что это поздний ответ, и вы, возможно, уже исправили эту проблему, но вот что я сделал для обработки 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 для изменения размера, поворота и обрезки моих изображений, а также для тех, кто ищет аккуратный инструмент. Обрабатывая их в первую очередь, я могу избежать необходимости что-либо делать с ними после. Поскольку вы делаете видео, это не будет применяться в вашем конкретном случае, но это удобный плагин для людей, занимающихся подобными вещами (как я).

Как только вы закончите работу с файлом, либо свернувшись с помощью API YouTube, либо обработав готовый файл, вы можете просто удалить файл, используя следующую команду. Кэшируйте видео или имя файла и местоположение сверху (это легко сделать, установив местоположение $var) и введите его в эту команду.

unlink("path_to_file_location"); //delete it
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...