首页 > 解决方案 > 从 GridFS 播放音频文件

问题描述

我正在尝试使用GridFSwith编写三个小工具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);
        });
});

标签: node.jsgridfsgridfs-stream

解决方案


推荐阅读