标签: gridfs

如何使用GridFS使用Node.js和Mongoose存储图像

我是Node.js的新手.任何人都可以提供一个如何使用GridFS来存储和检索使用Node.js和Mongoose的二进制数据(如图像)的示例吗?我需要直接访问GridFS吗?

mongoose mongodb node.js gridfs express

19
推荐指数
3
解决办法
2万
查看次数

在GridFS,express,mongoDB,node.js中存储来自POST请求的数据流

我试图找出如何将图像直接发布到GridFS而不将其作为临时文件存储在服务器上的任何位置.

我使用Postman(chrome ext.)发布文件,我设法将此帖子存储为文件,使用:

req.pipe(fs.createWriteStream('./test.png'));
Run Code Online (Sandbox Code Playgroud)

当从服务器上的文件创建readStream时,我还能够从readStream直接存储到GridFS.(见代码)

我有以下文件,saveFromReq.js它们监听POST,基本上只是将其传递给savePic.js.

saveFromReq.js:

var express = require('express');
var app = express();
var savePic = require('./savePic');
var fs = require('fs');
var GridStore = require('mongodb').GridStore;
var pic = './square.png';
var picID;



//When the following

 //var pic = fs.createReadStream('./square.png', {autoClose: true});

//is not commented out, and 'req' is replaced with 'pic' in the savePic function,
//the file square.png is stored correctly to GridFS

app.post('/picture', function(req, res){

    savePic(req, function(id){});
    res.writeHead(200, {'Content-Type': 'text' });
    res.end("Sucsess!\n");

});

app.listen(process.env.PORT …
Run Code Online (Sandbox Code Playgroud)

javascript mongodb node.js gridfs gridfs-stream

18
推荐指数
1
解决办法
2万
查看次数

可以通过Repository访问Spring Data + MongoDB GridFS吗?

我最近发现了GridFS,我想将其用于带元数据的文件存储.我只是想知道是否可以使用a MongoRepository来查询GridFS?如果是的话,有人可以举个例子吗?

如果有的话,我也会使用Hibernate来解决问题.

原因是:我的元数据包含许多不同的字段,查询存储库比new Query(Criteria.where(...))为每个方案编写一些更容易.我希望也可以简单地使用Java对象并通过REST API提供它而不需要文件本身.

编辑:我正在使用

  • Spring 4 Beta
  • Spring Data Mongo 1.3.1
  • Hibernate 4.3 Beta

spring mongodb gridfs spring-data spring-data-mongodb

16
推荐指数
1
解决办法
9167
查看次数

在MongoDB中存储非常大的文档

简而言之:如果您有大量不同大小的文档,那么相对较少的文档达到最大对象大小,那么在MongoDB中存储这些文档的最佳做法是什么?

我有一组文件,如:

{_id: ...,
  values: [12, 13, 434, 5555 ...]
}
Run Code Online (Sandbox Code Playgroud)

值列表的长度因文档的不同而异.对于大多数文档来说,它会有一些元素,少数元素会有数千万个元素,我将在MongoDB中达到最大对象大小限制.麻烦是我提出的任何特殊解决方案,因为那些非常大(而且相对较少)的文档可能会影响我如何存储小文档,否则这些文档会在MongoDB集合中幸福地生活.

据我所知,我有以下选择.我将不胜感激任何关于这些的优点和缺点的输入,以及我错过的任何其他选项.

1)使用另一个数据存储:这似乎太激烈了.我喜欢MongoDB,并不像我达到许多对象的大小限制.在单词的情况下,我的应用程序可以不同地处理非常大的对象和其他对象.它似乎并不优雅.

2)使用GridFS存储值:像传统数据库中的blob一样,我可以保留文档中前几千个值的元素,如果列表中有更多元素,我可以将其余的元素保存在GridFS对象中二进制文件.我无法在这部分进行搜索,但我可以忍受这一点.

3)滥用GridFS:我可以将每个文档保存在gridFS中.对于大多数(小)文档,二进制块将为空,因为文件集合将能够保留所有内容.其余的我可以将多余的元素保留在块集合中.与选项#2相比,这是否会带来开销?

4)真的滥用GridFS:我可以使用GridFS的文件集合中的可选字段来存储值中的所有元素.GridFS是否也为文件集合进行智能分块?

5)使用额外的"关系"集合来存储一对多关系,但此集合中的许多文档很容易超过一千亿行.

mongodb nosql gridfs

14
推荐指数
1
解决办法
6431
查看次数

你可以从GridFS(MongoDB文件系统)流式传输视频吗?

你能告诉像Ngix这样的流媒体服务器来流式传输存储在GridFS中的视频吗?如果是,它会影响性能吗?

streaming mongodb gridfs

13
推荐指数
1
解决办法
5102
查看次数

我应该使用GridFS或二进制数据来存储和检索MongoDB中的图像吗?

我想知道哪个更好/更快:

  1. 拥有一个单独的文档集合,其中只包含保存为二进制数据的图像,可能还包含一些元数据.
  2. 或使用GridFS存储图像.

mongodb gridfs

13
推荐指数
1
解决办法
9329
查看次数

是否存在任何开源独立的restful映像服务器?

我打算开发一个具有以下功能的独立的Restful Image Server,但首先想知道开源世界中是否存在类似的东西(语言并不重要):

  • 主图像上的restful(crud),例如:/ GET/asd983249as
  • 可能批量获取/列表
  • 支持与图像直接相关的元数据(Creative公共信息,尺寸等)(不包括从域到这些图像的引用)
  • 宁静懒惰的图像的不同'再现'.即:如果不存在再现,则根据请求创建.显然原始图像需要存在.允许不同的操作(调整大小和开始裁剪)
    • 例如:/ GET/asd983249as/100x100(简单调整大小)
    • 允许的尺寸是可配置的,所以不要得到DoS(反正不是那么快)

不起作用:

  • 合理的性能/可扩展/ HA(是的,我知道这没有说真的)
  • 可能是内存缓存

考虑进入Mongo GridFS路线,几乎免费获得MongoDb分片和复​​制.把Nginx的前面,也许(部分)直接使用nginx的,GridFS的(见下文)应允许休息-东西,并与一些配置,一些简单的缓存,如果GridFS的无法处理本身(不知道)

资料来源:

nginx-gridfs http://www.coffeepowered.net/2010/02/17/serving-files-out-of-gridfs/

的懒惰变得理念(和一个简单的实现的正是我要找的,但它似乎不是一个积极的维护项目的更多hobbyish) http://sumitbirla.com/2011/11/how-to-build-a-scalable -caching调整大小图像服务器/

其他接近的东西,但不是最终的解决方案 https://github.com/adamdbradley/foresight.js/wiki/Server-Resizing-Images

有什么事情已经做到了吗?

image nginx image-processing gridfs

12
推荐指数
1
解决办法
6955
查看次数

如何将 gridStore 替换为 gridFSBucket?

我有这个错误信息:

(node:11976) DeprecationWarning: GridStore is deprecated, and will be removed in a future version. Please use GridFSBucket instead
Run Code Online (Sandbox Code Playgroud)

有时我无法查看图片,我想正因为如此,由于文档不佳,我不知道如何将我的代码切换到 GridFSBucket,就是这样:

conn.once("open", () => {
  // Init stream
  gfs = Grid(conn.db, mongoose.mongo);
  //gfs = new mongoose.mongo.GridFSBucket(conn.db);
  gfs.collection("user_images");
});


var storageImage = new GridFsStorage({
  url: dbURI,
  options: { useNewUrlParser: true, useUnifiedTopology: true },
  file: (req, file) => {
    return new Promise((resolve, reject) => {
      crypto.randomBytes(16, (err, buf) => {
        if (err) {
          return reject(err);
        }
        const filename = buf.toString("hex") + path.extname(file.originalname);
        const …
Run Code Online (Sandbox Code Playgroud)

node.js gridfs gridfs-stream

12
推荐指数
1
解决办法
2399
查看次数

MongoDB从shell中删除GridFS对象

我使用GridFS存储在MongoDB中的文件.我需要从JavaScript shell中删除ID中的一些文件.我需要使用它的ID删除单个文件.我想我可以这样做:

db.fs.files.remove({_id: my_id});
Run Code Online (Sandbox Code Playgroud)

这在某种程度上起作用; 它从fs.files集合中删除文件,但不从集合中删除块本身fs.chunks.我知道的原因是因为我在RockMongo之前和之后检查了两个集合的长度.

我可以浏览一下块并删除那些引用该文件的内容,但有没有更好的内置方法呢?

javascript shell mongodb gridfs

11
推荐指数
2
解决办法
1万
查看次数

如何使用Node.js 0.10中的读取流立即链接写入流?

以下行将从指定的url变量下载图像文件:

var filename = path.join(__dirname, url.replace(/^.*[\\\/]/, ''));
request(url).pipe(fs.createWriteStream(filename));
Run Code Online (Sandbox Code Playgroud)

这些行将获取该图像并保存到MongoDB GridFS:

 var gfs = Grid(mongoose.connection.db, mongoose.mongo);
 var writestream = gfs.createWriteStream({ filename: filename });
 fs.createReadStream(filename).pipe(writestream);
Run Code Online (Sandbox Code Playgroud)

链接pipe像这样抛出错误:500无法管道.不可管.

request(url).pipe(fs.createWriteStream(filename)).pipe(writestream);
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为图像文件还没有准备好被读取,对吧?我该怎么做才能解决这个问题?错误:500无法管道.不可管.

使用下面的:Node.js的0.10.10,猫鼬,要求GridFS的流库.

pipe stream mongoose node.js gridfs

11
推荐指数
2
解决办法
2万
查看次数