从Sails.js中的skipper-gridfs下载图像

ayo*_*yon 4 javascript mongodb node.js gridfs sails.js

我在sails.js应用程序中使用gridfs将图像上传到服务器.我的上传代码如下

upload: function  (req, res) {
        req.file('avatar')
            .upload({
                adapter: require('skipper-gridfs'),
                uri: 'mongodb://localhost:27017/dbname.images'
            }, function whenDone(err, uploadedFiles) {
                if (err) return res.negotiate(err);
                else return res.ok({
                    files: uploadedFiles,
                    textParams: req.params.all()
                });
            });
    }
Run Code Online (Sandbox Code Playgroud)

我得到以下回应......

{
    "files": [
        {
            "fd": "2d8910a0-8ca2-4df1-9930-6ddd721a0416.jpg",
            "size": 172883,
            "type": "image/jpeg",
            "filename": "Photo on 12-20-14 at 9.53 PM.jpg",
            "status": "bufferingOrWriting",
            "field": "avatar",
            "extra": {
                "fileId": "54aee6ced4a0e88f0dc9025f",
                "fd": "2d8910a0-8ca2-4df1-9930-6ddd721a0416.jpg",
                "dirname": "."
            }
        }
    ],
    "textParams": {}
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我需要下载上面上传的文件,我该怎么办?我在互联网上获得了以下代码来下载任务,但这对我来说没有多大意义.基本上我想要上传图片的下载网址,我可以使用移动应用程序中的网址来显示图片.

var blobAdapter = require('skipper-gridfs')({
            uri: 'mongodb://localhost:27017/dbname.images'
        });
        blobAdapter.read(filename, callback);
Run Code Online (Sandbox Code Playgroud)

有人可以帮我这个吗?提前致谢.

ayo*_*yon 9

经过一番研究,我终于设法解决了这个问题.我fd在文件上传后得到响应中的字段,然后将其保存以供使用.我去了skipper-gridfs代码,发现了一个'read'接受该值并返回所需文件的方法.所以,我只是通过该方法从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));
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

我希望将来能帮到像我这样的人:)

  • 非常感谢 !很高兴看到Sails.JS的创造者在这里欣赏我的努力:) (2认同)