node.js - 从 GridFS 播放音频文件
问题描述
我正在尝试使用GridFS
with编写三个小工具NodeJS
。一是上传音频文件,二是下载,三是播放。
前两个(上传和下载)已经在工作。
我可以通过以下命令在终端中使用它们:
node upload.js
node download.js
我的问题涉及最后一个(播放)。
作为参考,这是第一个(上传)的相关代码:
const mongoose = require('mongoose'),
mongoDB_URI = '...';
mongoose.connect(mongoDB_URI,{useNewUrlParser:true,
useUnifiedTopology:true});
const conn = mongoose.connection,
path = require('path'),
Grid = require('gridfs-stream'),
fs = require('fs');
var audioPath = path.join(__dirname, './readFrom/GridFSSample.ogg');
Grid.mongo = mongoose.mongo;
conn.once('open', () => {
const gridFSBucket = new mongoose.mongo.GridFSBucket(conn.db);
const writeStream = gridFSBucket.openUploadStream('TheDBGridFSSample.ogg');
fs.createReadStream(audioPath).pipe(writeStream);
writeStream.on('finish', () => {
process.exit(0);
});
});
这是第二个(下载)的相关代码:
const mongoose = require('mongoose'),
mongoDB_URI = '...';
mongoose.connect(mongoDB_URI,{useNewUrlParser:true,
useUnifiedTopology:true});
const conn = mongoose.connection,
Grid = require('gridfs-stream'),
fs = require('fs');
Grid.mongo = mongoose.mongo;
conn.once('open', () => {
const gridFSBucket = new mongoose.mongo.GridFSBucket(conn.db);
gridFSBucket.openDownloadStreamByName('TheDBGridFS.ogg').
pipe(fs.createWriteStream('./writeTo/'+'GridFSFromDB.ogg')).
on('error', function (error) {
console.log("Error:" + error);
}).
on('finish', function () {
process.exit(0);
});
});
对于最后一个(播放),我想保持相同的简单模式。我认为它应该与第二个(下载)类似;但在这一点上我没有任何工作,即使在尝试了一些受我在网上找到的启发的解决方案之后。我希望有人能给我一些好的建议。
这是我的代码(不工作):
const mongoose = require('mongoose'),
mongoDB_URI = '...';
mongoose.connect(mongoDB_URI,{useNewUrlParser:true,
useUnifiedTopology:true});
const conn = mongoose.connection,
Grid = require('gridfs-stream'),
fs = require('fs');
Grid.mongo = mongoose.mongo;
conn.once('open', () => {
const gridFSBucket = new mongoose.mongo.GridFSBucket(conn.db);
gridFSBucket.openDownloadStreamByName('TheDBGridFS.ogg').
pipe(fs.createReadStream()).
on('error', function (error) {
console.log("Error:" + error);
}).
on('finish', function () {
process.exit(0);
});
});
解决方案
推荐阅读
- android - 蓝牙连接:MODE_IN_CALL 与 MODE_IN_COMMUNICATION
- react-native - 加载父数据后如何根据父ID加载子数据以查看?
- c# - 删除自己的帐户 ASP.NET
- angular - RadCartesianChart 空白屏幕
- html - 如何修复移动的导航栏底部手机
- amazon-web-services - Orange API:如何使用来自 Live Objects 的 HTTP 在 AWS 上发布?
- netlogo - Netlogo,检查两个代理是否连接到同一个代理
- javascript - 使用 Web.config 中的选项填充 HTML 选择
- javascript - 如何删除单元格中的按钮并将其替换为文本/数字?
- python - 获取 JSON 数据的特定值