我正在为node.js开发一个基于ytdl模块的函数。实际上,我只是想下载一个YouTube视频。 当我测试我的功能时,我收到了这个错误:
2017-12-16T17:25:48.627Z 27dbca8d-e286-11e7-9f17-851e6c66e221 Error: spawn EACCES
at exports._errnoException (util.js:1018:11)
at ChildProcess.spawn (internal/child_process.js:319:11)
at exports.spawn (child_process.js:378:9)
at exports.execFile (child_process.js:143:15)
at call (/var/task/node_modules/youtube-dl/lib/youtube-dl.js:163:5)
at Function.getInfo (/var/task/node_modules/youtube-dl/lib/youtube-dl.js:285:5)
at module.exports (/var/task/node_modules/youtube-dl/lib/youtube-dl.js:107:10)
at exports.handler (/var/task/index.js:6:14)
在一些谷歌搜索请求后,我发现它与访问问题有关。但是,我的代码没有需要访问权限的特殊操作。 你能帮忙吗
var path = require('path');
var fs = require('fs');
var ytdl = require('./node_modules/youtube-dl');
exports.handler = (event, context, callback) => {
var video = ytdl('https://www.youtube.com/watch?v=AW8OOp2undg',
// Optional arguments passed to youtube-dl.
['-o', '/tmp/test.mp4']);
var size = 0;
video.on('info', function(info) {
'use strict';
size = info.size;
console.log('Got video info');
var file = path.join(__dirname, info._filename);
video.pipe(fs.createWriteStream(file));
});
var pos = 0;
video.on('data', function data(chunk) {
'use strict';
pos += chunk.length;
// `size` should not be 0 here.
if (size) {
var percent = (pos / size * 100).toFixed(2);
process.stdout.cursorTo(0);
process.stdout.clearLine(1);
process.stdout.write(percent + '%');
}
});
video.on('end', function end() {
'use strict';
console.log('\nDone');
});
callback(null, 'Hello from Lambda');
};
答案 0 :(得分:1)
node-ytdl使用预编译的二进制文件,因此您应该从与目标相同的OS / arch部署lambda。
或使用纯javascript模块:
如果您只对从youtube下载感兴趣,则应考虑使用纯Javascript youtube下载模块。 => https://github.com/fent/node-ytdl
答案 1 :(得分:0)
只需更改youtube-dl的权限:
chmod +x youtube-dl