我正在创建一个托管在Server1上的应用程序,在那里我正在录制视频并将其上传到服务器Server2。我正在使用Ajax上传文件。一旦记录完成,我就会得到‘videoSrc:https://server1/a0080679-caaf-41b0-b6a0-ce41d1283476’文件的URL。我使用以下代码通过Ajax上传视频:
function uploadFile()
{
var data = new FormData();
data.append('video', videoSrc);
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: "https://server2/upload.php",
data: data,
processData: false,
contentType: false,
cache: false,
timeout: 600000,
success: function (data) {
console.log(data);
},
error: function (e) {
console.log("ERROR : ", e);
}
});
}
在服务器端(PHP),我只获取post参数中的URL。我无法获得$_FILES指令中的文件。代码:
print_r($_POST);
print_r($_FILES);
输出:
Array
(
[video] => blob:https://server1/a0080679-caaf-41b0-b6a0-ce41d1283476
)
Array
(
)
如何上传录制好的视频?请帮帮忙。
发布于 2019-12-27 21:14:06
我通过反复试验找到了解决方法。我发送的是使用createObjectURL()创建的blob (记录的输出)的URL。我使用Ajax直接发送blob,PHP $_FILES接收它。
较早的代码:
var blob = new Blob(recordedChunks, {
type: 'video/mp4'
});
//Creating blob url which is only valid for the browser
//where the application is running
var videoSrc = URL.createObjectURL(blob);
var data = new FormData();
data.append('video', videoSrc); //Incorrect: sending the Blob URL
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: "https://server2/upload.php",
data: data,
processData: false,
contentType: false,
cache: false,
timeout: 600000,
success: function (data) {
console.log(data);
},
error: function (e) {
console.log("ERROR : ", e);
}
});
已更正的代码:
var blob = new Blob(recordedChunks, {
type: 'video/mp4'
});
var data = new FormData();
data.append('video', blob); //Correct: sending the Blob itself
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: "https://server2/upload.php",
data: data,
processData: false,
contentType: false,
cache: false,
timeout: 600000,
success: function (data) {
console.log(data);
},
error: function (e) {
console.log("ERROR : ", e);
}
});
https://stackoverflow.com/questions/59484863
复制相似问题