我在客户端使用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!');
});
});
});
}
答案 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);