在这一点上,由于缺乏文档,我简直是在抓狂。
我只是想读取使用 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 将始终指示所有数据在通过管道传输后已被读取,但数据实际上并未在任何地方通过管道传输,并且输出函数永远不会运行。
我不知所措。任何想法都会有所帮助。
感谢所有读者。