Ошибка файла не найдена при использовании GridFSBucket openDownloadStream - PullRequest
0 голосов
/ 27 ноября 2018

Я могу загрузить файл с помощью openDownloadStream из GridFSBucket и увидеть, что файл загружен и виден в чанках songs.files.Но по какой-то причине я получаю следующую ошибку при попытке загрузить ее -

Caught exception: Error: FileNotFound: file def1.txt was not found

Мой код -

var express = require('express');
var gridModule = express.Router();
var mongoose = require('mongoose');
var fs = require('fs');

gridModule.post('/', (req, res) => {
    console.log("::::grid");
    //const gridfs = new mongoose.mongo.GridFSBucket(mongoose.connection.db);

    //const writeStream = gridfs.openUploadStream('test.dat');

    var gridfs = new mongoose.mongo.GridFSBucket(mongoose.connection.db, {
        chunkSizeBytes: 1024,
        bucketName: 'songs'
    });

    fs.createReadStream('./def.txt').
        pipe(gridfs.openUploadStream('def1.txt')).
        on('error', function (error) {
            assert.ifError(error);
        }).
        on('finish', function () {
            console.log('done!');
            process.exit(0);
        });

});

gridModule.get('/', (req, res) => {
    var gridfs = new mongoose.mongo.GridFSBucket(mongoose.connection.db, {
        chunkSizeBytes: 1024,
        bucketName: 'songs'
    });
    /* var bucket = new mongodb.GridFSBucket(db, {
        chunkSizeBytes: 1024,
        bucketName: 'songs'
      }); */

      gridfs.openDownloadStream('def1.txt').
        pipe(fs.createWriteStream('./def1.txt')).
        on('error', function(error) {
            console.log(":::error");
          assert.ifError(error);
        }).
        on('finish', function() {
          console.log('done!');
          process.exit(0);
        });
});

module.exports = gridModule;

Я также пытался использовать идентификатор ObjectId, но та же ошибка.Кто-нибудь угадает, что я могу ошибаться здесь?

Примечание. Код может показаться неоптимизированным, как объявление корзины, дважды игнорируйте ее, пока я исправлю ее, как только она заработает.

1 Ответ

0 голосов
/ 27 ноября 2018

Согласно API doc здесь , чтобы использовать filename в качестве аргумента, вы должны использовать

openDownloadStreamByName(filename, options)

, а не openDownloadStream.openDownloadStream занимает id файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...