Javascript发送视频blob到PHP - 如何发送mimetype?

问题描述 投票:0回答:1

我通过录制的视频流(MediaRecorder)在JavaScript中生成blob。

生成的文件最终为.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类型与文件一起提交?

javascript php ajax xmlhttprequest blob
1个回答
0
投票

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);

注意mime类型!看起来很有希望!

© www.soinside.com 2019 - 2024. All rights reserved.