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

download webm file from client with nodejs

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

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!');
            });
        });
    });
}

只需删除 URL 的前 5 个字符。

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

我最终使用简单的 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,我们负责在服务器端保存文件。

很有魅力!