Nodejs - 尝试将Blob保存到文件服务器

时间:2015-07-03 20:34:36

标签: javascript node.js mongodb blob

我在尝试将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;如果没有别的办法,我会尝试使用套接字。

感谢任何帮助!

0 个答案:

没有答案