Node.js 如何使用Sails.JS+;GridFS?

Node.js 如何使用Sails.JS+;GridFS?,node.js,mongodb,sails.js,gridfs,gridfs-stream,Node.js,Mongodb,Sails.js,Gridfs,Gridfs Stream,我目前正在使用Sails.js构建web,在从GridFS检索图像文件时遇到了麻烦。我已使用skipper gridfs成功地将文件上载到我的mongo gridfs。我不知道如何以正确的方式显示该文件(我是Sails.js和Node系统的新手) 下面是我从gridfs检索图像文件的代码,类似于FileController.js(我使用的是gridfs流): 当我运行它时,控制台没有显示任何内容。 也没有错误 我该如何解决这个问题 补充问题: 将文件存储到本地磁盘或从本地磁盘读取文件是否比使用g

我目前正在使用Sails.js构建web,在从GridFS检索图像文件时遇到了麻烦。我已使用skipper gridfs成功地将文件上载到我的mongo gridfs。我不知道如何以正确的方式显示该文件(我是Sails.js和Node系统的新手)

下面是我从gridfs检索图像文件的代码,类似于FileController.js(我使用的是gridfs流):

当我运行它时,控制台没有显示任何内容。 也没有错误

我该如何解决这个问题

补充问题:

  • 将文件存储到本地磁盘或从本地磁盘读取文件是否比使用gridfs更好、更容易
  • 我选择gridfs stream来检索文件格式gridfs是否正确
  • 您现在可以在sails中使用来管理上载/下载

    var blobAdapter = require('skipper-gridfs')({uri: 'mongodb://jimmy@j1mtr0n1xx@mongo.jimmy.com:27017/coolapp.avatar_uploads' });
    
    上传:

    req.file('avatar')
    .upload(blobAdapter().receive(), function whenDone(err, uploadedFiles) {
      if (err) return res.negotiate(err);
      else return res.ok({
        files: uploadedFiles,
        textParams: req.params.all()
      });
    });
    
    下载

    blobAdapter.read(filename, callback);
    

    请记住,文件名将在上载到mongo后发生更改,您必须使用第一次响应中返回的文件名。

    skipper gridfs
    代码中,有一个“read”方法接受
    fd
    值并返回与该值对应的所需文件。因此,您只需通过该方法从mongo中提取该文件并作为响应发送即可。它应该可以正常工作

    download: function (req, res) {
        var blobAdapter = require('skipper-gridfs')({
            uri: 'mongodb://localhost:27017/mydbname.images'
        });
    
        var fd = req.param('fd'); // value of fd comes here from get request
        blobAdapter.read(fd, function(error , file) {
            if(error) {
                res.json(error);
            } else {
                res.contentType('image/png');
                res.send(new Buffer(file));
            }
        });
    }
    
    我希望有帮助:)

    其他问题:

  • 是的,使用gridfs在性能和效率上都更好。通常mongodb对二进制文件有16MB的限制,但使用gridfs可以存储任何大小的文件,它会将它们分块存储

  • 如上所示

  • 第一个参数'blobAdapter().receive()'是否正确?因为我不能用那种模式。但是如果我使用({adapter:require('skipper-gridfs'),uri:'mongodb://127.0.0.1:27017/app.media_uploads“},回调)它可以接受文件。
    download: function (req, res) {
        var blobAdapter = require('skipper-gridfs')({
            uri: 'mongodb://localhost:27017/mydbname.images'
        });
    
        var fd = req.param('fd'); // value of fd comes here from get request
        blobAdapter.read(fd, function(error , file) {
            if(error) {
                res.json(error);
            } else {
                res.contentType('image/png');
                res.send(new Buffer(file));
            }
        });
    }