2013-07-24 16 views
20

Chciałbym pobrać dane binarne z żądania https.Pobieranie zawartości binarnej w pliku node.js za pomocą http.request

znalazłem podobne pytanie, który korzysta z metody żądania, Getting binary content in Node.js using request, jest napisane ustawienie kodowania do zerowy powinny działać, ale tak nie jest.

options = { 
hostname: urloptions.hostname, 
path: urloptions.path, 
method: 'GET', 
rejectUnauthorized: false, 
encoding: null 
}; 

req = https.request(options, function(res) { 
var data; 
data = ""; 
res.on('data', function(chunk) { 
    return data += chunk; 
}); 
res.on('end', function() { 
    return loadFile(data); 
}); 
res.on('error', function(err) { 
    console.log("Error during HTTP request"); 
    console.log(err.message); 
}); 
}) 

Edit: ustawienie kodowania do 'binarny' nie działa albo

+0

Jeśli znasz kodowania jesteś próbuje zastosować do danych może nie dość łatwo przekonwertować go na binarny? Chodzi mi o to, że to komputer, nie masz wyboru, ale otrzymujesz dane binarne ... – ChrisCM

Odpowiedz

38

Przyjęta odpowiedź nie działa dla mnie (tj. Ustawienie kodowania na binarne), nawet użytkownik, który zapytał qu estion wspomniał, że to nie działa.

Oto co pracował dla mnie, zaczerpnięte z: http://chad.pantherdev.com/node-js-binary-http-streams/

http.get(url.parse('http://myserver.com:9999/package'), function(res) { 
    var data = []; 

    res.on('data', function(chunk) { 
     data.push(chunk); 
    }).on('end', function() { 
     //at this point data is an array of Buffers 
     //so Buffer.concat() can make us a new Buffer 
     //of all of them together 
     var buffer = Buffer.concat(data); 
     console.log(buffer.toString('base64')); 
    }); 
}); 

Edit: aktualizacji odpowiedź po sugestii średnikiem

+1

To jest poprawne, ale nie musisz robić wszystkiego że protoslicing etc ... po prostu 'return Buffer.concat (data);' – Semicolon

+0

Przychodzi przez to, dla mnie, ustawienie kodowania na wartość null z opcjami get() faktycznie działa. Dla odniesienia, próbując ustawić kodowanie poprzez wartości domyślne dla modułu żądania nie działa. – TheDiveO

10

trzeba ustawić kodowanie do odpowiedzi, nie zażądać:

req = https.request(options, function(res) { 
    res.setEncoding('binary'); 

    var data = [ ]; 

    res.on('data', function(chunk) { 
     data.push(chunk); 
    }); 
    res.on('end', function() { 
     var binary = Buffer.concat(data); 
     // binary is your data 
    }); 
    res.on('error', function(err) { 
     console.log("Error during HTTP request"); 
     console.log(err.message); 
    }); 
}); 

Oto przydatny odpowiedź: Writing image to local server

+2

ten kod mówi, że dane muszą być tablicą buforów, ale są ciągi znaków ( – makc

Powiązane problemy