使用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,我们负责在服务器端保存文件。
很有魅力!
我在客户端创建了一个带有 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,我们负责在服务器端保存文件。
很有魅力!