在这一点上,由于缺乏文件,我真的把头发拉了出来。
我只是想尝试使用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将始终指示所有数据在通过管道传输后已被读取,但数据实际上并未在任何地方传输,输出功能永远不会运行。
我很茫然。任何想法都会有所帮助。
感谢所有读者。