2016-05-15 10 views
1

Ich habe tar.gz Datei auf einem Nodejs-Server. Ich möchte, dass es von einer anderen nodejs App heruntergeladen werden kann. Ich kann es mit txt, jpeg etc ... Aber kein Erfolg mit tar.gz. Wenn ich die tar.gz Datei herunterlade, scheint sie auf dem Client leer zu sein.Serving tar.gz Datei und laden Sie es auf nodejs

Dies ist die vereinfachte Grund Server, die ich verwendet

var http = require('http'); 

http.createServer(function(request, response){ 

fs.readFile(__dirname + "/update/test.tar.gz", (err, data) => { 
    if (err) { 

    } else { 

     response.setHeader('Content-Type', 'application/x-gzip'); 
     response.end(data); 
    } 
}); 

Dies ist der Client, der

var postData = {}; 

var options = { 
    protocol : "http:", 
    host: "localhost", 
    port: 3010, 
    path: '/GetFile', 
    method: 'POST', 
    headers: { 
     'Content-Type': 'application/octet-stream', 
     'Content-Length': Buffer.byteLength(postData) 
    } 
}; 

var req = http.request(options, function(res) { 

    var body = ''; 

    res.on('data', function (chunk) { 

     body += chunk; 
    }); 

    res.on('end', function(){ 

     fs.writeFile("./test4.tar.gz", body, function(err) { 

     }); 


    }); 
}); 

req.write(postData); 
req.end(); 
herunterladen versucht

Es Datei erfolgreich Speichern scheint, aber ich kann es extrahieren.

Antwort

0

Ich löste es durch Erstellen von Stream wie unten.

var req = http.request(options, function(res) { 

    var body = ''; 
    var file = fs.createWriteStream('./test4.tar.gz'); 

    res.on('data', function(chunk){ 
     file.write(chunk); 
     }).on('end', function(){ 
      file.end(); 
     }); 
    }); 

req.write(postData); 
req.end();