Javascript отправить видео BLOB-объектов в PHP - как также отправить MIME-тип? - PullRequest
0 голосов
/ 14 сентября 2018

Я генерирую BLOB-объект в JavaScript через поток записанного видео (MediaRecorder).

Полученный файл заканчивается как .webm, что подтверждается ffmpeg.Все идет нормально.Вот что я делаю.

//promises container
let dfds = [];

//promise 1 - get blob file content
dfds.push(new Promise(resolve => {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', file_url, true);
    xhr.responseType = 'blob';
    xhr.onload = function(e) {
        if (this.status == 200) resolve(this.response);
    };
    xhr.send();
}));

//(other non-pertinent promises omitted here)

//when ready, build and send request
Promise.all(dfds).then(resolution_data => {
    let req = new XMLHttpRequest(), fd = new FormData();
    fd.append('title', title);
    fd.append('file', resolution_data[0]); //<-- the blob
    req.open('POST',  'my-script.php');
    req.send(fd);
});

Это отлично работает.Однако, на стороне PHP, когда я запускаю print_r($_FILES), тип mime заканчивается как text / plain.Я хотел бы передать в PHP тип mime, чтобы я мог проверить это, прежде чем пропустить файл (я знаю, что mimetype не всегда надежен, но это всего лишь очередная проверка нескольких типов, которые я делаю.)

Я добавил это в запрос AJAX:

req.setRequestHeader('Content-Type', 'video/webm');

Однако, с этим добавлением, скрипт PHP сообщает, что $_FILES совершенно пуст.

Как я могу отправитьТип MIME вместе с файлом?

1 Ответ

0 голосов
/ 14 сентября 2018

FormData.append () как поле «имя файла».См .:

https://developer.mozilla.org/en-US/docs/Web/API/FormData/append

Что бы произошло, если бы вы дали ему имя, например «myMovie.webm»?Стоит попробовать, я думаю.Итак:

fd.append('file', resolution_data[0]); 

станет:

fd.append('file', resolution_data[0], 'myMovie.webm'); 

Я вообще не проверял, это всего лишь предложение.

Поскольку вы еще не отреагировалиЯ прочитал немного больше.Я также нашел это:

https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects

в нем они используют этот код:

var content = '<a id="a"><b id="b">hey!</b></a>'; 
var blob = new Blob([content], { type: "text/xml"});
formData.append("webmasterfile", blob);

Обратите внимание на тип пантомимы!Это выглядит очень многообещающе!

...