2016-03-27 123 views
0

我正在做一个流星申请。如何提供使用CollectionFS在Meteor中存储的PDF文件?

目前,我的服务器上有几个PDF文件。要直接服务于这些已有的PDF文件到客户端,我做这种方式,它工作得很好。

Router.route("/file/:fileName", function() { 
    var fileName = this.params.fileName; 
    // console.log(process.env.PWD); 
    var filePath = process.env.PWD + '/' + fileName; 
    var fs = Meteor.npmRequire('fs'); 
    var data = fs.readFileSync(filePath); 
    this.response.writeHead(200, { 
    "Content-Type": "application/pdf", 
    "Content-Length": data.length 
    }); 
    this.response.write(data); 
    this.response.end(); 
}, { 
    where: "server" 
}); 

我节省使用CollectionFS(后来,我将生成PDF文件,并将它们保存这些PDF到蒙戈现在,我只是直接将这些已经存在的PDF保存到Mongo中,因为我首先想让Mongo部分工作。)。

testCollection = new FS.Collection("testCollection", { 
    stores: [new FS.Store.GridFS("testCollection")] 
}); 

testCollection.allow({ 
    'insert': function() { 
     return true; 
    } 
}); 

var file = new FS.File(process.env.PWD + '/PDFKitExampleServerSide.pdf'); 
file.encoding = 'binary'; 
file.name('myPDF.pdf'); 
var document = testCollection.insert(file); 
console.log(document._id); 

我的问题是,当我使用保存这些CollectionFS PDF文件到蒙戈(就像我上面做的),我该如何检索和服务于这些PDF文件?

Router.route("/database/:pdfId", function() { 
//need help here 
}, { where: "server"}); 

回答

1

经过大量的搜索和尝试,我终于得到它的工作。

Router.route("/database/:pdfId", function() { 
    var pdfId = this.params.pdfId; 
    var file = testCollection.findOne({_id: pdfId}); 
    var readable = file.createReadStream("tmp"); 
    var buffer = new Buffer(0); 
    readable.on("data", function(b) { 
     buffer = Buffer.concat([buffer, b]); 
    }); 
    var response = this.response; 
    readable.on("end", function() { 
     response.writeHead(200, { 
      "Content-Type": "application/pdf", 
      "Content-Length": buffer.length 
     }); 
     response.write(buffer); 
     response.end(); 
    }); 
}, { 
    where: "server" 
}); 
相关问题