İstemci için MongoDB (GridFS) dosyasından istemciye istek göndermek üzere istek sahibim var, ancak içerik bellekte olduğu için data
değişkenini kullanıyor. Bunu akış modunda yapmalı ve dosyaları müşteriye göndermem gerek. Yanıt için pipe
arabelleği nasıl yeniden düzenleyemiyorum. İkinci koda bak - işe yaramıyor, ama ihtiyacım olan şeyleri göster.Express'te istemciye akış arabelleği
Belki de yararlıdır: GridFS'deki veriler Base64 kodludur, ancak akış daha verimli olabilirse değiştirilebilir.
In-Memory versiyonu
router.get('/get/:id', function(req,res){
getById(req.params.id, function(err, fileId){
new GridStore(db, fileId, "r").open(function(err, gridStore) {
res.set('Content-Type', gridStore.contentType);
var stream = gridStore.stream(true);
var data = '';
stream.on("data", function(chunk) {
data += chunk;
});
stream.on("end", function() {
res.send(new Buffer(data, 'base64'));
});
});
});
});
Akış modu sürümü
router.get('/get/:id', function(req,res){
getById(req.params.id, function(err, fileId){
new GridStore(db, fileId, "r").open(function(err, gridStore) {
res.set('Content-Type', gridStore.contentType);
var stream = gridStore.stream(true);
stream.on("data", function(chunk) {
new Buffer(chunk, 'base64').pipe(res);
});
stream.on("end", function() {
res.end();
});
});
});
});
Güncelleme
ben bu sorunu çözmek için yakın olduğumu düşünüyorum. Umarım bu işe buldum ama Base64 gelen does't kod çözme:
new GridStore(db, fileId, "r").open(function(err, gridStore) {
res.set('Content-Type', gridStore.contentType);
gridStore.stream(true).pipe(res);
});
marioosh benim cevap bakmak yaptı? – malix