标签: gridfs

如何在使用 gridfs 保存之前调整大小和图像?

我是 mongoDB 和 gridfs 的初学者。我有一个代码可以在数据库中保存传入的图像。但我想在保存之前调整图像的大小。它尝试使用 Sharp,但我不太明白它是如何工作的。

我尝试了以下代码,但它不起作用

const storage = new GridFsStorage({
  url: mongoURI,

  file: (req, file) => {
    return new Promise((resolve, reject) => {
      const filename = req.params.userID;
      const fileInfo = {
        filename: filename,
        bucketName: "ProfilePic", 
      };
      resolve(fileInfo);
    });
  }
});

const upload = multer({ storage });

router.post("/setProfilePic/:userID", upload.single("picture"), async(req, res) => {
//code not working
  await sharp(req.file.path)
    .resize(500)
    .jpeg({quality: 50})
    .toFile(
        path.resolve(req.file.destination,'resized',image)
    )
// end of non working code
  return res.status(200).json({state: "ok"})
});
Run Code Online (Sandbox Code Playgroud)

mongodb node.js gridfs multer sharp

5
推荐指数
1
解决办法
1033
查看次数

多个 MongoDB 连接的 Multer GridFsStorage 动态配置

因此,我使用 MongoDB Atlas、Mongoose、Multer 和 GridFsStorage 将文件上传到云上的单个数据库,效果很好,但我希望能够动态使用不同的数据库连接将文件上传到不同的数据库

为此,我想设置 Multer GridFsStorage 配置,以便“db”属性字段根据 API 请求动态更改。但是,我无法访问“db”属性内的 HTTP 请求对象,这使得我可以动态更改数据库连接。GridFsStorage 配置对象中的 “db”属性仅接受以下内容:在此输入图像描述

在下面的示例中,您可以看到我正在使用自定义 getDatabaseConnection() 方法创建数据库连接,然后将该连接传递到接受单个静态数据库连接的数据库字段中。

// Multer GridFsStorage configuration.
const storage = new GridFsStorage({
    
    // I NEED TO CHANGE THE DB CONNECTION DYNAMICALLY TO UPLOAD FILES TO DIFFERENT 
    // DATABASES, BUT I HAVE NO ACCESS TO THE HTTP REQUEST OBJECT INSIDE THE DB FIELD!
    db: connectionFactory.getDatabaseConnection(process.env.DB_CONNECT), 
    
    // I can access the request object (req) inside the "file" field.
    file: …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb gridfs multer multer-gridfs-storage

5
推荐指数
1
解决办法
371
查看次数

最好的GridFS C#驱动程序?

GridFS C#驱动程序的最佳实现是什么?你有什么经历?

更新:

当我说"最好"时 - 我的意思是稳定性.

谢谢!!!

c# mongodb gridfs mongodb-.net-driver

4
推荐指数
1
解决办法
2199
查看次数

如何使用mongodb的Gridfs与PIL(Python图像库)

我使用mongodb并将文件保存到gridfs

现在我想从gridfs编辑图像...

我用这个代码

def thumbnail(file_obj):
    import StringIO
    from PIL import Image

    im = StringIO.StringIO()

    im.write(file_obj.raw_file)

    im_ful = Image.open(im)

    return im_ful.info
Run Code Online (Sandbox Code Playgroud)

但是pil说"无法识别图像文件"

那个图像也;)如何解决它

python mongodb python-imaging-library gridfs

4
推荐指数
1
解决办法
1699
查看次数

想要将图像存储到给定URL的gridfs

是否可以直接将图像存储到mongo GridFS中,这是我从API获得的?或者我必须在本地存储然后将其插入mongo?

我试图直接从URL插入,但C#驱动程序给了我一个错误,不支持URI ..

mongodb gridfs mongodb-.net-driver

4
推荐指数
1
解决办法
1641
查看次数

为什么gridfs get只能通过filename来处理文件id(ObjectId)

我正在使用nodejs mongodb mongoose和gridfs.当我试图通过它获取一个文件的filname everthing工作得很好,如果我想通过id得到它我得到错误:你想要阅读的文件不存在.我在下面的代码console.log("res.pic_id:"+ res.pic_id)我得到了正确的ObjectId.这是代码:

var GridFS = require('GridFS').GridFS;
var myFS = new GridFS('db');
var fs = require('fs')
var Profile = db.model('Profile');
Profile.findOne({'_id' : clientID},['_id', 'username','pic_id','pic_filename'],function(err, res){
    if (err) { 
        console.log("ERROR serching user info:  " + err);
        callback(JSON.stringify(JSONRes(false, err)));
    }
    else {
         if (res) {
        console.log("res.pic_id : " + res.pic_id);
        myFS.get(res.pic_id,function(err,data){
            if (err)
                console.log("ERROR "+err)
            else {
                callback(data);
            }})
        };
        }
        else {
        callback(JSON.stringify(JSONRes(false, err)));

        }
    }
})
Run Code Online (Sandbox Code Playgroud)

谢谢!

mongodb node.js gridfs

4
推荐指数
2
解决办法
4396
查看次数

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

我在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)

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

javascript mongodb node.js gridfs sails.js

4
推荐指数
1
解决办法
1823
查看次数

python PIL图像如何将图像保存到缓冲区,以便以后使用?

我有一个png应该转换为jpg并保存到的文件gridfs,我使用python的PILlib加载该文件并执行转换工作,问题是我想将转换后的图像存储到MongoDB Gridfs中,在保存过程中,我可以只需使用该im.save()方法。所以我用a StringIO来保存临时文件,但是不起作用。

这是代码片段:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PIL import Image
from pymongo import MongoClient
import gridfs
from StringIO import StringIO


im = Image.open("test.png").convert("RGB")

#this is what I tried, define a 
#fake_file with StringIO that stored the image temporarily.
fake_file = StringIO()
im.save(fake_file,"jpeg")

fs = gridfs.GridFS(MongoClient("localhost").stroage)

with fs.new_file(filename="test.png") as fp:
    # this will not work
    fp.write(fake_file.read())


# vim:ai:et:sts=4:sw=4:
Run Code Online (Sandbox Code Playgroud)

我对python的IO机制非常了解,如何使这项工作有效?

python io stringio gridfs

4
推荐指数
1
解决办法
5105
查看次数

使用GridFs从MongoDB中提取文件 - 未打开ID为###的文件进行写入

我正在使用Grid保存并将二进制数据加载到mongoDB数据库.我正在使用nodejs.按照我能够找到的所有示例(非常相似),我的代码是:

router.get('/getlog',function(req,res) {
    if (req.isAuthenticated())
    {
        var mongo = require('mongodb');
        var Grid = require('gridfs-stream');
        var db = new mongo.Db('logApp', new mongo.Server("127.0.0.1", 27017));

        db.open(function (err) {
            if (err) {
                return handleError(err);
            }

            var gfs = Grid(db, mongo);

            var readStream = gfs.createReadStream({
                _id: req.query.id
            }).pipe(res);
        });        
    }
    else
        res.redirect('/home');
});
Run Code Online (Sandbox Code Playgroud)

req.query.id是我需要的文件的id.我得到的回应是:

MongoError: file with id 557aa98e6f1373cb11e8f294 not opened for writing
Run Code Online (Sandbox Code Playgroud)

这没有任何意义,因为我不写,我正在读文件.

mongodb node.js gridfs

4
推荐指数
1
解决办法
3822
查看次数

如何使用nodeJS下载保存在gridFS中的文件

我需要从GridFS下载一个简历,下面是我写的代码,但是这似乎没有给我一个物理文件供下载,这用于阅读内容.我该如何下载文件?

exports.getFileById = function(req, res){
var conn = mongoose.connection;
var gfs = Grid(conn.db, mongoose.mongo);
var id = req.params.ID;
gfs.exist({_id: id,root: 'resume'}, function (err, found) {
    if (err) return handleError(err);
    if (!found)
        return res.send('Error on the database looking for the file.');
    gfs.createReadStream({_id: id,root: 'resume'}).pipe(res);
});
};
Run Code Online (Sandbox Code Playgroud)

mongodb node.js gridfs

4
推荐指数
2
解决办法
2884
查看次数