GridFSBucket .openDownloadStreamByName (имя файла) не передает самый последний файл с указанным именем - PullRequest
0 голосов
/ 27 апреля 2019

Я загрузил несколько файлов mp4 с одним и тем же именем ("dbVideo.mp4") в MongoDB, используя GridFSBucket.Однако, когда я пытаюсь загрузить самый последний файл mp4, который я загрузил с помощью .openDownloadStreamByName ("dbVideo.mp4"), он не передает последний загруженный файл с именем "dbVideo.mp4".

Я пытался вручную установить .openDownloadStreamByName с опцией "revision", т.е. {revision: -1}, но это не имело никакого эффекта.

const ytdl = require("ytdl-core");
require("dotenv").config();
var assert = require("assert");
var fs = require("fs");
var mongodb = require("mongodb");
var express = require("express");
const router = express.Router();

router.post("/convertURLToMP4", (req, res) => {
  var videoMp4Stream = ytdl(req.body.YTUrl).pipe(
    fs.createWriteStream("convertedVideo.mp4")
  );

  videoMp4Stream.on("finish", function() {
    var uri = process.env.DB_ROUTE;

    mongodb.MongoClient.connect(
      uri,
      { useNewUrlParser: true },
      function(error, db) {
        assert.ifError(error);

        var bucket = new mongodb.GridFSBucket(db, { bucketName: "videos" });

        fs.createReadStream("convertedVideo.mp4")
          .pipe(bucket.openUploadStream("dbVideo.mp4"))
          .on("error", function(error) {
            assert.ifError(error);
            res.status(500).json({ error: "Internal server error" });
          })
          .on("finish", function() {
            console.log("Video added the database!");
            res.status(200).json({ status: "ok" });
            fs.unlink("convertedVideo.mp4", function(err) {});
          });
      }
    );
  });
});

router.get("/streamMP4", (req, res) => {
  var uri = process.env.DB_ROUTE;

  mongodb.MongoClient.connect(
    uri,
    { useNewUrlParser: true },
    function(error, db) {
      assert.ifError(error);

      var bucket = new mongodb.GridFSBucket(db, { bucketName: "videos" });

      bucket
        .openDownloadStreamByName("dbVideo.mp4")
        .pipe(fs.createWriteStream("outputVideo.mp4"))
        .on("error", function(error) {
          assert.ifError(error);
        })
        .on("finish", function() {
          console.log("Downloaded video to Server!");
          fs.createReadStream("outputVideo.mp4").pipe(res);
          fs.unlink("outputVideo.mp4", function(err) {});
        });
    }
  );
});

module.exports = router;

Ожидается:

Я ожидал, что .openDownloadStreamByName будет передавать по умолчанию самый последний файл с заданным именем, как указано в Документах .

Факт:

Поток загрузки - это всегда первое видео, которое я загрузил на mongodb.

...