在Meteor中访问服务器端的GridFS文件

时间:2015-10-01 01:42:55

标签: javascript meteor gridfs gridfs-stream

在这一点上,由于缺乏文件,我真的把头发拉了出来。

我只是想尝试使用GridFS读取上传到服务器的文件。在客户端,它就像转到http://app.url/cfs/files/collection/id一样简单。我已经检查过以确保它以这种方式工作。

所以我查看了CollectionFS的源代码,找到了this code

var readStream = storage.adapter.createReadStream(ref.file, {start: range.start, end: range.end});

readStream.on('error', function(err) {
  // Send proper error message on get error
  if (err.message && err.statusCode) {
    self.Error(new Meteor.Error(err.statusCode, err.message));
  } else {
    self.Error(new Meteor.Error(503, 'Service unavailable'));
  }
});

readStream.pipe(self.createWriteStream());

我认为既然有效,那么这就是:

// From project js file
FilesStore = new FS.Store.GridFS('files');
Files = new FS.Collection('files', {
    stores: [FilesStore]
});

// In Meteor method or Meteor shell
var file = Files.findOne();
var stream = FilesStore.adapter.createReadStream(file);
stream.on('data', function(data) {
    console.log(data);
});

或者,使用fast-csv,这个:

// In Meteor method or Meteor shell
var file = Files.findOne();
var stream = FilesStore.adapter.createReadStream(file);
var csv_stream = csv().on('data', function(data) {
    console.log(data);
});
stream.pipe(csv_stream);

我已经尝试了一切。文件的上传进度为100,URL可通过Web浏览器访问。但无论我做什么,数据函数都不会运行。 ReadStream将始终指示所有数据在通过管道传输后已被读取,但数据实际上并未在任何地方传输,输出功能永远不会运行。

我很茫然。任何想法都会有所帮助。

感谢所有读者。

0 个答案:

没有答案