【问题标题】:How can I read the mp3 files from the mongodb that I have stored using gridFS?如何从我使用 gridFS 存储的 mongodb 中读取 mp3 文件?
【发布时间】:2017-05-09 03:08:33
【问题描述】:

我的代码:

storeAudio.js

var mongoose = require('mongoose');
var fs = require('fs');
var Grid = require('gridfs-stream');
Grid.mongo=mongoose.mongo;


//establish mongoDB connection
 mongoose.Promise = global.Promise;
var conn = mongoose.createConnection('mongodb://localhost:27017/aHolyBoly');
conn.once('open',function(){
   var gfs = Grid(conn.db);
 // var db = new mongo.Db('aHolyBoly', new mongo.Server("127.0.0.1", 27017));
//var gfs = Grid(db, mongo);

var writeStream = gfs.createWriteStream({
    filename:'song1.mp3'
});
fs.createReadStream('../list/hero.mp3').pipe(writeStream);
writeStream.on('close',function(file){
    console.log(file.filename +'Written to db');
});
});

我的 mp3 文件已成功写入数据库。 现在我的目标是使用 express 创建路由,以便我可以在我的 angular2 应用程序中将其用作 API 并用作提供程序。

server.js

var mongoose = require('mongoose');
var fs = require('fs');
var Grid = require('gridfs-stream');
Grid.mongo=mongoose.mongo;


//establish mongoDB connection
 mongoose.Promise = global.Promise;
var conn = mongoose.createConnection('mongodb://localhost:27017/aHolyBoly');
conn.once('open',function(){
   var gfs = Grid(conn.db);
 // var db = new mongo.Db('aHolyBoly', new mongo.Server("127.0.0.1", 27017));
//var gfs = Grid(db, mongo);

var writeStream = gfs.createWriteStream({
    filename:'song1.mp3'
});
fs.createReadStream('../list/hero.mp3').pipe(writeStream);
writeStream.on('close',function(file){
    console.log(file.filename +'Written to db');
});
});

在我的代码中的某处,我无法找到使用 gridFS 在 Db 中编写的歌曲。 gridFS API 的链接gridFS API Link

我想使用 ionic2 创建一个包含搜索栏的应用程序,当我输入歌曲名称时,它会显示歌曲并且我可以播放它。

我在 1 周内苦苦挣扎,在堆栈上写了 3 次,但无法得到答案。

【问题讨论】:

  • 您能否将我重定向到 GitHub 存储库或某个地方以下载您的整个代码并尝试调试?

标签: node.js mongodb angular express ionic2


【解决方案1】:

我敢打赌,您是服务器端 Web 开发的新手,因为您的问题有点忽略了创建 node.js 应用程序的全部意义。

编写服务器时,目标是服务器无法访问客户端计算机上的文件。这意味着您的应用程序充当瘦客户端。不要混淆 node.js 也在您的计算机上运行:它创建自己的模拟服务器,即使它在您使用的同一台计算机上,它也充当真正的遥远计算机。出于这个原因,您不能修改项目库之外的文件,或者即使您可以修改它也将是一个 hack,并且它不是 node.js 的用途。

如果您想要一个专门修改计算机上文件的程序,您应该学习一种胖客户端编程语言,例如 C、C++ 或 Java。它们仅在您的计算机上运行,​​广告可以完全访问您的任何文件。

如果您出于某种原因坚持使用 JavaScript,它也有能力修改您的文件,但它仍然不是它的用途。您必须授予它特殊权限,并且您将所有个人文件的访问权限授予浏览器仍然很奇怪。但是,客户端上的这个 Javascript 代码 id 即您不需要 node.js,也不需要表达。客户端代码可以使用单个浏览器编写和运行。查看this article 了解更多信息。

但是,如果您仍然坚信 node 是您的方式,那么您仍然有一些选择。首先,但我认为这不是您的答案:编写一个上传网站,将 mp3 文件上传到您的服务器(仍然在同一台计算机上,但将其放在项目位置)。它应该可以工作并且看起来像一个实际的网站(就像 node.js 的用途一样)。最后,您所要求的可以实现,但它真的很hacky,您可以尝试从应用程序路径中引用它,例如

var fs = require('fs'),
path = require('path'),    
filePath = path.join(__dirname, '../outerfile.mp3')
filePath2 = path.join('/var/outerfile.mp3');

但是,它的运行方式可能取决于平台,而且根本不可能工作。

我的最后建议:您应该考虑为您的项目使用另一种语言。

【讨论】:

  • 谢谢你,@Daniel Grant,为我的帖子付出了宝贵的时间。虽然我是新手。我想向你解释我正在工作的整个事情,以便你可以帮助我我面临的问题。我正在编辑我的问题。
  • 请查看更新后的问题,如果您能帮助我解决这个问题,请告诉我。
猜你喜欢
  • 2015-12-21
  • 2014-05-11
  • 2013-10-27
  • 2021-07-06
  • 2016-04-05
  • 2013-09-22
  • 2015-04-06
  • 1970-01-01
  • 2011-06-26
相关资源
最近更新 更多