2016-04-05 4 views
1

Cela peut ne pas être possible mais j'essaie de renvoyer un objet tampon d'une image sur Rackspace en utilisant le module pkgcloud sans avoir à écrire sur le système de fichiers. J'ai déjà vu cela, mais les deux exemples montrent que le téléchargement est redirigé vers le système de fichiers.Récupère le tampon du téléchargement de Rackspace en utilisant pkgcloud

function get() { 
     return new Promise(function (resolve, reject) { 
      _this._RackClient.download(options, function(err, results) { 
       if (err !== null) { 
        return reject(err); 
        console.log("Errow Downloading:", err); 
       } 
       resolve(buffer); 
      }); 
     }); 
    } 
    return get(); 

C'est idéalement que je voudrais que cela fonctionne, mais il n'y a actuellement pas un corps présent dans la requête. Puis-je utiliser un stream.passThrough() et retourner cela similaire au téléchargement d'un tampon?

Répondre

1

.download() renvoie un flux lisible. Par exemple:

var stream = _this._RackClient.download(options); 
var buf = []; 
var nb = 0; 
var hadErr = false; 
stream.on('data', function(chunk) { 
    buf.push(chunk); 
    nb += chunk.length; 
}).on('end', function() { 
    if (hadErr) 
    return; 
    switch (buf.length) { 
    case 0: 
     return resolve(new Buffer(0)); 
    case 1: 
     return resolve(buf[0]); 
    default: 
     return resolve(Buffer.concat(buf, nb)); 
    } 
}).on('error', function(err) { 
    hadErr = true; 
    reject(err); 
}); 
+0

Cela a fonctionné parfaitement! Merci pour la réponse! – mcclaskiem

+0

cela a fonctionné pour obtenir des données correctement, mais je suis curieux de savoir ce que l'instruction switch gère, car il ne semble pas être le bon tampon. @mscdex – mcclaskiem

+0

Que voulez-vous dire par "le tampon correct?" 'buf' stocke juste les morceaux comme ils viennent et le' switch' est juste un peu d'optimisation pour éviter d'appeler 'Buffer.concat()' sauf si nécessaire. – mscdex