遍历mp3文件名数组并将id3标签提取到nodejs中的另一个数组中

Posted

技术标签:

【中文标题】遍历mp3文件名数组并将id3标签提取到nodejs中的另一个数组中【英文标题】:Loop through array of mp3 filenames and extract id3 tags in to another array in nodejs 【发布时间】:2016-05-11 01:59:26 【问题描述】:
function extractId3(value, index, list) 
  if (path.extname(value) === '.mp3') 
    id3js( file: '/Users/user/materialApp/client/songs/' + value, type: id3js.OPEN_LOCAL , function(err, tags) 
      return tags.v2.image;
    );
  


exports.index = function(req, res) 
  fs.readdir('/Users/user/materialApp/client/songs', function(err, files) 
    images = _.map(files, extractId3);
    console.log(images);
    res.json(files);
  );
;

我对 web 开发和 nodejs 的异步特性相当陌生。

我正在尝试遍历我在 fs.readdir() 之后获得的所有 mp3 文件并从中提取 id3 标签。

console.log(images) 产生 []

我无法理解如何处理 id3js() 的异步性质。提取此信息并将其作为对此 http 请求的响应传递的正确方法是什么。

【问题讨论】:

id3js 返回什么?我会建议研究 Promise 并使用它们来构建你的数组 【参考方案1】:

使用采摘

pluck _.pluck(list, propertyName) 可能是 map 最常见的用例:提取列表 属性值。

var stooges = [name: 'moe', age: 40, name: 'larry', age: 50, 名称:'卷曲',年龄:60]; _.pluck(stooges, 'name'); => [“萌”,“拉里”,“卷曲”]

images = _.pluck(files, extractId3);

【讨论】:

【参考方案2】:

我可以让它工作的唯一方法是使用递归:

exports.index = function(req, res) 
  var info = new Array();
  fs.readdir('/Users/user/materialApp/client/songs', function(err, files) 
    var mp3s = uscore.filter(files, function(file)  if(path.extname(file) === '.mp3') return file);
    var ID = 0;
    console.log(mp3s.length);
    if (ID < mp3s.length) 
        extractId3(mp3s[ID]);
    else 
        console.log(info);

    function extractId3(file) 
      id3js( file: '/user/user/materialApp/client/songs/' + file, type: id3js.OPEN_LOCAL , function(err, tags) 
        if(tags.title) 
          console.log(tags.v1);
          info.push('file': file, 'title':tags.title, 'album':tags.album, 'year':tags.year);
        
        ID++;
        if (ID < mp3s.length)
          extractId3(mp3s[ID]);
        else 
          res.json(info);
        
      );
   

【讨论】:

以上是关于遍历mp3文件名数组并将id3标签提取到nodejs中的另一个数组中的主要内容,如果未能解决你的问题,请参考以下文章

如何通过fileReference从本地上传的mp3中提取id3标签? (AS3)

如何使用 php 获取我的 mp3 文件的 ID3 标签?

如何从 MP3 ID3 标签中提取专辑封面?

通过javascript从文件夹中的mp3文件中读取id3标签

ID3标签提取

从文件名中提取并填充 id3 标记信息