代码之家  ›  专栏  ›  技术社区  ›  eduPeeth

使用gridfsbucket opendownloadstream时出现“找不到文件”错误

  •  0
  • eduPeeth  · 技术社区  · 6 年前

    我可以使用gridfsbucket的opendownloadstream上传一个文件,并在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 id,但同样的错误。有人猜到我在这里做错了什么吗?

    注意-这里的代码可能不像声明两次bucket那样优化,请暂时忽略它,因为一旦它起作用,我将更正它。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Aritra Chakraborty    6 年前

    根据API文件 here ,以便使用 filename 作为论据,你应该使用

    openDownloadStreamByName(filename, options)
    

    openDownloadStream .OpenDownloadStream采用 id 文件的。