我在尝试将Blob保存到文件服务器时遇到了问题。
我尝试做的是从用户的网络摄像头捕获视频,然后在客户端显示,然后将其发布到我可以访问的文件服务器上。< / p>
以下是创建记录结束时显示的.webm Blob的代码
function embedVideoPreview(optional_url) {
var url = optional_url || null;
var video = document.querySelector('#video-preview video') || null;
var webmBlob;
if (!video) {
video = document.createElement('video');
video.autoplay = true;
video.controls = false;
video.loop = true;
video.style.width = canvasW + 'px';
video.style.height = canvasH + 'px';
document.querySelector('#video-preview').appendChild(video);
} else {
window.URL.revokeObjectURL(video.src);
}
if (!url) {
webmBlob = Whammy.fromImageArray(frames, 1000 / 60);
url = window.URL.createObjectURL(webmBlob);
}
video.src = url;
//here, i post it to my server through a form
var videoURLSource = document.createElement('input');
videoURLSource.id = 'videoURLSource';
videoURLSource.name = 'videoURLSource';
videoURLSource.type = 'text';
videoURLSource.value = url.slice(5);
submitForm.appendChild(videoURLSource);
var blobSource = document.createElement('input');
blobSource.id = 'blobSource';
blobSource.name = 'blobSource';
blobSource.value = webmBlob;
submitForm.appendChild(blobSource);
}
所以我保存了元素的src属性中使用的url,这是服务器端发生的事情-i将它写在磁盘上并通过mongoose将其保存在mongoDB数据库中:
app.post('/submit', function(req, res, err){
//getting the data from the POST
var receivedAnswer = req.body.answer;
var receivedURL = req.body.videoURLSource[0];
var receivedBlob;
//getting all chunks of the blob
receivedBlob += req.body.blobSource[0];
fs.writeFile("test.webm", toSaveBlob, function(err) {
if(err) {
return console.log(err);
}
console.log('file written to disk');
});
//putting the data submitted into a mongoose schema
var a = new Answer({answer: receivedAnswer, url: receivedURL, blob: receivedBlob});
res.send('submitted reponse: '+ receivedAnswer + '<br/>' + 'url:' + receivedURL + '<br/>' + 'blob:' + receivedBlob);
a.save(function (err, data) {
if (err) console.log(err);
else console.log('Saved : ', data);
});
});
我们当前的目录中确实写了一个test.webm,但只有几个字节,而不是预期的几兆字节。
所以我的猜测是我保存了第一块而没有保存其余部分,但我环顾四周并且在回复POST请求时没有想出办法。
我也不确定表单API是否支持传递Blob。
我已经查看了网络套接字,但它是我一无所知的东西,所以我宁愿尝试用另一种方式解决这个问题,更糟糕的是,最糟糕的是,我&#39;如果没有别的办法,我会尝试使用套接字。
感谢任何帮助!