标签: gridfs

将数据追加到现有 gridfs 文件

正如我所看到的,java mongo 驱动程序不提供OutputStream从现有 gridFS 文件获取的功能com.mongodb.gridfs.GridFSFile

我必须GridFSInputFile直接创建或使用gridFs.createFile()方法。

是缺少java驱动还是gridfs的限制?

除了创建新文件/删除旧文件之外,您能否建议任何解决方法?

谢谢

java mongodb gridfs mongodb-java

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

在 MongoDB GridFS 中存储图像

我正在讨论在 Mongo GridFS 或云文件系统中存储图像。由于一些原因,我倾向于云。所使用的语言是 Nginx 服务器上的 PHP。

  1. 在 GridFS 中存储图像会增加数据库的大小。因此,更多的数据库必须在内存中,当涉及到分片之类的事情时,我将花费更多的时间/金钱来管理服务器。

  2. 从 GridFS 检索图像比云需要更长的时间,因为我必须 a) 使用 id 查询图像 b) 将图像读入内存 c) 使用 php 标头显示图像

云会更好,因为它是直接到云的图像 url。

这些理由听起来合理吗,还是我的想法应该朝着不同的方向发展?

php cloud image-processing mongodb gridfs

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

MongoDB - 使用GridFS的最大文件大小

我想知道如果有人想使用GridFS存储文件,最大文件大小是多少?我找不到任何信息,所以任何帮助将不胜感激.

mongodb gridfs

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

Sails.js在使用skipper将文件上传到MongoDB之前检查内容(有效文件,图像大小调整等)

我目前正在我的应用程序中创建一个文件上传系统.我的后端是Sails.js(10.4),它作为我单独的前端(Angular)的API.

我选择将我上传的文件存储到我的MongoDB实例,并使用sails的内置文件上传模块Skipper.我正在使用适配器skipper-gridfs(https://github.com/willhuang85/skipper-gridfs)将文件上传到mongo.

现在,上传文件本身不是问题:我在我的客户端上使用dropzone.js,它将上传的文件发送到/ api/v1/files/upload.文件将上传.

为了实现这一点,我在FileController中使用以下代码:

module.exports = {
    upload: function(req, res) {
        req.file('uploadfile').upload({
            // ...any other options here...
            adapter: require('skipper-gridfs'),
            uri: 'mongodb://localhost:27017/db_name.files'
        }, function(err, files) {
            if (err) {
                return res.serverError(err);
            }
            console.log('', files);
            return res.json({
                message: files.length + ' file(s) uploaded successfully!',
                files: files
            });
        });
    }
};
Run Code Online (Sandbox Code Playgroud)

现在问题是:我想在上传文件之前先处理这些文件.特别是两件事:

  1. 检查文件是否被允许:content-type标头是否与我想要允许的文件类型匹配?(jpeg,png,pdf等 - 只是基本文件).
  2. 如果文件是图像,请使用imagemagick(或类似的东西)将其调整为几个预定义的大小.
  3. 添加也将保存到数据库的特定于文件的信息:对已上载文件的用户的引用,以及对该文件所属的模型(即文章/注释)的引用.

我不知道从哪里开始或如何实现这种功能.所以任何帮助将不胜感激!

file-upload mongodb gridfs sails.js skipper

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

如何在 GridFS 中执行更新操作(使用 Java)?

我正在使用Mongo-Java-Driver 2.13我在GridFS 中存储了一个 PDF 文件(大小30mb)。我能够轻松地执行插入、删除和查找操作。

    MongoClient mongo = new MongoClient("localhost", 27017);
    DB db = mongo.getDB("testDB");
    File pdfFile = new File("/home/dev/abc.pdf");
    GridFS gfs = new GridFS(db,"books");     
    GridFSInputFile inputFile = gfs.createFile(pdfFile);
    inputFile.setId("101");
    inputFile.put("title", "abc");
    inputFile.put("author", "xyz");
    inputFile.save();
Run Code Online (Sandbox Code Playgroud)

数据在坚持books.filesbooks.chunks收藏。现在我想更新

  • 案例1:pdf文件
  • 案例 2:标题或作者

如何在 GridFS 中为案例 1执行这些更新操作?

我开始知道我需要维护我的文件的多个版本并选择正确的版本。有人可以澄清一下吗?

编辑

我可以轻松更新元数据(标题、作者)。

    GridFSDBFile outputFile = gfs.findOne(new BasicDBObject("_id", 101));
    BasicDBObject updatedMetadata = new BasicDBObject();
    updatedMetadata.put("name", "PG");
    updatedMetadata.put("age", 22);

    outputFile.setMetaData(newMetadata);       
    outputFile.save();
Run Code Online (Sandbox Code Playgroud)

java mongodb gridfs mongodb-java

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

使用 GridFSBucket openDownloadStream 时出现文件未找到错误

我可以使用 GridFSBucket 的 openDownloadStream 上传文件,并看到该文件已上传并在ongs.files 块下可见。但由于某种原因,在尝试下载时出现以下错误 -

Caught exception: Error: FileNotFound: file def1.txt was not found
Run Code Online (Sandbox Code Playgroud)

我的代码是 -

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) => …
Run Code Online (Sandbox Code Playgroud)

filestream mongoose mongodb node.js gridfs

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

如何为 GridFS 集合创建猫鼬模型?

所以我试图为 GridFS 集合创建一个猫鼬模型,但没有成功。

let bucket;
(async () => {
    try {
        await mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true });
        const { db } = mongoose.connection;
        bucket = new mongoose.mongo.GridFSBucket(db, { bucketName: 'tracks' });
    }
    catch(err) {
        console.log(err);
    }
})();
Run Code Online (Sandbox Code Playgroud)

这是我的课程架构和模型:

const courseSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
    },
    tracks: [{
        type: mongoose.Types.ObjectId,
        ref: 'tracks.files'
    }],
});

const Course = mongoose.model('Course', courseSchema);
Run Code Online (Sandbox Code Playgroud)

这是我的曲目模式和模型:

const trackSchema = new mongoose.Schema({
    length: { type: Number },
    chunkSize: { type: Number },
    uploadDate: …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js gridfs

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

错误:grid.mongo.GridStore不是构造函数,使用mongoose、Grid-fs-stream和grid multer存储

我收到以下提到的错误。基本配置如下: 我已将文件上传到服务器上,我想下载它们,但收到这些错误时,我向 /api/files/delete/${fileId} 调用了 POST 请求,该请求应该调用路由并返回文件发送到浏览器,而不是使用网格相关模块获取错误。

MONGODB_CONNECTION_STRING = mongodb://localhost:27017/Cstore

Db structure={Cstore:{uploads.files,uploads.chunks,users}}

On requesting POST         axios.post(`/api/files/delete/${fileId}`)

Getting error: 

     this._store = new grid.mongo.GridStore(grid.db, this.id || new grid.mongo.ObjectID(), this.name, this.mode, options);
[0]                 ^
[0] 
[0] TypeError: grid.mongo.GridStore is not a constructor
[0]     at new GridReadStream (/home/lenovo/Desktop/react/cstore/node_modules/gridfs-stream/lib/readstream.js:68:17)

This is server.js

      app.get('/image/:filename', (req, res) => {
    gfs.files.findOne({ 
      _id: mongoose.Types.ObjectId(req.params.filename)
      // filename: req.params.filename.toString()
    }, (err, file) => {
      // Check if file
      if (!file || file.length === 0) {
        console.log("not found")
        return res.status(404).json({
          
          err: 'No file …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js gridfs multer-gridfs-storage

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

GridFS和FindOne基于文件元数据

我在文件元数据中存储了一些额外的细节.我正试图弄清楚如何使用c#官方驱动程序查询它.

任何帮助将不胜感激.

c# mongodb gridfs

3
推荐指数
1
解决办法
1379
查看次数

错误ENOENT,在nodejs中打开'/ tmp/45e85388793de'

我试图在GridFS中保存项目及其文件.我想首先保存项目并使用项目的"_id"作为我要保存文件的文件的元数据.当我尝试这样我得到ENOENT时,打开'/ tmp/45e85388793de'错误.这是我的代码

newProject.save(function (err,project) {
            if (err) {
              console.log('save error', err);
            }
             console.log("project added");
             var id=poject._id;
             var filepath    = req.files.file.path;
             var filename    = req.files.file.name;
           var writestream = gfs.createWriteStream({ filename: filename, metadata:id });
             console.log(filepath);                                                       
             fs.createReadStream(filepath)
             .on('end', function() {

             })
            .on('error', function(err) {
             console.log("error encountered"+err);//ENOENT,open error  
             })
            .pipe(writestream);
            });
Run Code Online (Sandbox Code Playgroud)

为什么我收到此错误以及如何解决?

node.js gridfs

3
推荐指数
1
解决办法
4506
查看次数