0

在这一点上,由于缺乏文档,我简直是在抓狂。

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

所以我查看了 CollectionFS 的源代码,发现了这段代码

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。但无论我做什么,数据函数都不会运行。ReadStream 将始终指示所有数据在通过管道传输后已被读取,但数据实际上并未在任何地方通过管道传输,并且输出函数永远不会运行。

我不知所措。任何想法都会有所帮助。

感谢所有读者。

4

0 回答 0