使用nodejs从客户端下载webm文件

时间:2015-02-02 20:23:57

标签: node.js client blob server webm

我在客户端使用whammy.js和媒体html标签创建了一个webm文件 我有在客户端上创建的webm文件的URL。它看起来像这样:

blob:http%3A//localhost%3A3000/543e2866-f145-4ea8-96f8-c66eb78cbda2  

我想将文件下载到我的服务器。我在我的nodejs服务器上使用下载模块,但我得到一个错误:

Error: Specify a valid URL

为什么?如何将文件下载到服务器?

谢谢!

更新:下面是下载的处理程序

module.exports = function(io) {
    var Download    = require('download'),
        progress    = require('download-status'),
        dir         = './downloads/';

    io.sockets.on('connection', function (socket) {
        console.log('We have Lift-off!');
        socket.on('video url', function (data) {
            console.log(data.video_url);
            var url = data.video_url.slice(5);
            console.log(url);
            var download = new Download({ strip: 1, mode: '755' })
                .get(url)
                .dest(dir)
                .use(progress());

            download.run(function (err, files, stream) {
                if (err) {
                    throw err;
                }
                console.log('File downloaded successfully!');
            });
        });
    });
}

2 个答案:

答案 0 :(得分:1)

我最终用简单的fs上传文件。

客户端:

var files = {
    video: {
        name: fileName + '.webm',
        type: 'video/webm',
        dataURL: output
    }
}
socket.emit('video', files);

Whammy创建了dataURL,因此我们只需将它作为JSON发送到带有socket.io的服务器。

服务器:

module.exports = function(io) {
    var fs          = require('fs'),
        path        = require('path'),
        upload_dir  = './uploads',
        output_dir  = './outputs';

    function _upload(file_content, file_name) {
        var fileRootName = file_name.split('.').shift(),
        fileExtension = file_name.split('.').pop(),
        filePathBase = upload_dir + '/',
        fileRootNameWithBase = filePathBase + fileRootName,
        filePath = fileRootNameWithBase + '.' + fileExtension,
        fileID = 2;

        while (fs.existsSync(filePath)) {
            filePath = fileRootNameWithBase + '(' + fileID + ').' + fileExtension;
            fileID += 1;
        }

        fs.writeFileSync(filePath, file_content);
    }

    io.sockets.on('connection', function (socket) {

        console.log('We have Lift-off!');
        socket.on('video url', function (data) {
            console.log(data.video_url);
        });

        socket.on('video', function (data) {
            console.log('writing to disk');
            console.log(data.video.dataURL);
            console.log(data.video.name);
            _upload(data.video.dataURL, data.video.name);
        });
    });
}

使用fs,我们负责在服务器端保存文件。

就像一个魅力!

答案 1 :(得分:0)

只需从网址中删除前5个字符即可。

您可以使用url.slice(5);