在客户端,用户使用RecordRTC录制短视频。当用户按下上传时,我将blob
使用 获取视频的数据recorder.getBlob()
,并将其上传到我的服务器(使用 Rails 和回形针处理文件上传)。
起初,我想将<input type='file'>
字段值更改为blob
数据。事实证明,为了浏览器的安全性,我无法使用 javascript 更改它。
然后,我尝试使用 AJAX:
$("#ajax-submit").on("click", function() {
var data = new FormData();
data.append("record[video]", recorder.getBlob(), (new Date()).getTime() + ".webm");
var oReq = new XMLHttpRequest();
oReq.open("POST", "/records/");
oReq.send(data);
oReq.onload = function(oEvent) {
if (oReq.status == 200) {
console.log("Uploaded");
} else {
console.log("Error " + oReq.status + " occurred uploading your file.");
}
};
});
但是,它不起作用。在log
文件中,我将得到以下无法处理的信息:
Processing by RecordsController#create as */*
Parameters: {
"video"=>"data:video/webm;base64,GkXfo0AgQoaBAUL3gQFC8o..."
}
如果我使用 正常提交form
,我的参数将如下所示:
Processing by RecordsController#create as HTML
Parameters: {
"video"=>#<ActionDispatch::Http::UploadedFile:0x3b476e0 @original_filename="testing.mp4", @content_type="video/mp4", @headers="Content-Disposition: form-data; name=\"record[video]\"; filename=\"testing.mp4\"\r\nContent-Type: video/mp4\r\n", @tempfile=#<File:a_path>>
}
我该如何解决这个问题?
非常感谢。