首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用gridfs-stream将字符串写入到gridfs

使用gridfs-stream将字符串写入到gridfs
EN

Stack Overflow用户
提问于 2015-01-01 03:03:13
回答 3查看 2.2K关注 0票数 1

我来了一个写文件到gridfs的代码片段,但是我找不到将字符串更新到Gridfs的写方法。

下面的代码片段将使用path进行更新,但是直接字符串缓冲区又如何呢?

代码语言:javascript
运行
复制
var metadata = {
    "path": path
};
var writestream = gfs.createWriteStream({
    filename: name,
    mode: 'w',
    content_type: type,
    metadata: metadata
});
fs.createReadStream(path).pipe(writestream);
//    var buf = new Buffer("hello");
writestream.on('close', function (file) {
    console.log("Gridfs created");
});
EN

回答 3

Stack Overflow用户

发布于 2018-11-09 00:49:49

在搜索如何使用NodeJS在Mongo GridFS中存储字符串数据时,首先会出现此页面。因为这里和其他地方的大多数答案都是基于过时的API,所以我决定发布一个基于较新的GridFSBucket的代码。该代码具有覆盖现有文件的额外规定。如果你不需要这个--你可以用创建副本的openUploadStream替换openUploadStreamWithId。

代码语言:javascript
运行
复制
var mongo = require('mongodb');
var stream = require('stream');
var MongoClient = mongo.MongoClient;

function getFileSystemItem(dbo, filename) {
  var buf = new Buffer('');
  return new Promise(function(resolve, reject) {
    var bucket = new mongo.GridFSBucket(dbo);
    var readstream = bucket.openDownloadStream(filename);
    readstream.on('data', (chunk) => {
      buf = Buffer.concat([buf, chunk]);
    });
    readstream.on('error', (err) => {
        reject(err);
    });
    readstream.on('end', () => {
        var res = buf.toString();
        buf = null; // Clean up memory
        readstream.destroy();
        resolve(res);
    });
  });
}

function putFileSystemItem(dbo, filename, data) {
  var putItemHelper = function(bucket, resolve, reject) {
    var writeStream = bucket.openUploadStreamWithId(filename, filename);
    var s = new stream.Readable();
    s.push(data);
    s.push(null); // Push null to end stream
    s.pipe(writeStream);
    writeStream.on('finish', resolve);
    writeStream.on('error', reject);
  };
  return new Promise(function(resolve, reject) {
    var bucket = new mongo.GridFSBucket(dbo);
    bucket.find({_id: filename}).count(function(err, count) {
      if (err) return reject(err);
      if (count > 0) {
          bucket.delete(filename, function() {
          putItemHelper(bucket, resolve, reject);
        }, reject)
      } else {
        putItemHelper(bucket, resolve, reject);
      }
    }, reject);
  });
}

function test() {
  var MongoUrl = 'mongodb://localhost:27017';
  var dbName = 'test';
  MongoClient.connect(MongoUrl, function(err, db) {
    if (err) throw err;
    var dbo = db.db(DbName);
    putFileSystemItem(dbo, 'test', 'this is a test')
    .then(function(a) {
      console.log('Wrote a gridFS file with metadata:', a);
      return getFileSystemItem(dbo, 'test')
    })
    .then(function(a) {
      console.log('Got data back from a gridFS file:', a);
      db.close();
    })
    .catch(function(e) {
      console.log(e);
      db.close();
    })
  });
}
test();

来源:这是由十几个其他StackOverflow页面和MongoDB应用编程接口帮助组装而成的。

票数 3
EN

Stack Overflow用户

发布于 2015-07-29 00:08:11

即使已经有一段时间了。我有这个问题,并解决了它创建一个流从字符串而不是一个文件。如下所示:

代码语言:javascript
运行
复制
  var writestream = gfs.createWriteStream({
      filename: fileName
  });

  // Create stream with buffer to pipe to writestream
  var s = new stream.Readable();
  s.push(pic);
  s.push(null); // Push null to end stream
  s.pipe(writestream);

  writestream.on('close', function (file) {
    // Do anything with the file
    cb(null, file.filename);
  }).on('error', cb);

here获得了流的想法

票数 1
EN

Stack Overflow用户

发布于 2015-05-20 08:11:59

我也面临着同样的问题。我只是简单地使用gfs.remove删除了该文件,然后将更新后的文件添加到GridFS。

也可供参考。我首先使用async.series完成删除操作,然后将更新后的文件写入GridFS。

希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27725285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档