簡體   English   中英

如何從使用gridFS存儲的mongodb中讀取mp3文件?

[英]How can I read the mp3 files from the mongodb that I have stored using gridFS?

我的代碼:

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文件在DB中成功寫入。 現在我的目標是使用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鏈接的鏈接

我想使用ionic2創建一個包含搜索欄的應用程序,當我輸入歌曲名稱時,它將顯示歌曲,我可以播放它。

我在1周內掙扎了這3次寫在堆棧但無法得到答案。

我打賭你是服務器端web開發的新手,因為你的問題有點遺漏了創建node.js應用程序的重點。

編寫服務器時,目標是服務器無法訪問客戶端計算機上的文件。 這意味着您的應用程序充當瘦客戶端。 不要混淆node.js在您的計算機上運行:它創建了自己的模擬服務器,即使它位於您使用的同一台計算機上,它也可以作為一台真正遙遠的計算機。 出於這個原因,你無法修改項目庫之外的文件,或者即使你可以修改它也不是什么node.js。

如果您想要一個專門修改計算機上文件的程序,您應該學習一種胖客戶端編程語言,如C,C ++或Java。 它們只能在您的計算機上運行,​​廣告可以完全訪問您的任何文件。

如果您因任何原因堅持使用JavaScript,它也有能力修改您的文件,但它仍然不是它的目的。 您必須賦予它特殊權限,並且您將所有個人文件訪問瀏覽器仍然很奇怪。 但是在客戶端這個Javascript代碼id,即你不需要node.js,也不需要表達。 客戶端代碼可以使用單個瀏覽器編寫和運行。 查看此文章以獲取有關它的更多信息。

但如果你仍然確信node是你的方式,那么你仍然有一些選擇。 首先,但我不認為這是你的答案:寫一個上傳網站,將mp3文件上傳到你的服務器(仍然在同一台計算機上,但把它放在項目位置)。 它應該工作並且看起來像一個真實的網站(就像node.js一樣)。 最后你要求的東西可以實現,但它真的很糟糕,你可以嘗試從應用程序路徑中引用它

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

然而,它可能依賴於平台,它將如何運行並且根本不可能正常運行。

我的最后建議:你應該考慮為你的項目使用另一種語言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM