这是我正在尝试做的事情:
我已经按照我可以找到的每个示例(没有管道到磁盘),但内容仍然被破坏了。我试过强制各种“接受编码”(gzip,deflate),但它们基本上解析为相同的数据,只是压缩。
我认为这与响应编码有关,而不是我要求的数据。
到目前为止,这是代码:
var parsedUrl = require('url').parse(PATH_TO_IMAGE)
var params = {
hostname: parsedUrl.hostname,
path: parsedUrl.path,
}
return http.get(params, function(photo_res) {
var photoData = '';
res.setEncoding('binary');
photo_res.on('data', function(chunk) {
photoData += chunk;
});
photo_res.on('end', function() {
// DO STUFF TO UPLOAD IMAGE
});
photo_res.on('error', function(err) {
console.error('Unable to download photo:', err);
return done(err);
});
});
答案 0 :(得分:0)
您有一个简单的排版错误,可能导致Node使用不正确的类型解释您的数据流。你的错误就在这一行:
res.setEncoding('binary');
为避免混淆,您应该保留名为res
的响应变量,并且由于您的数据是二进制格式,因此最好将其保留为缓冲区。
http.get(options, function(res) {
var photoData = [];
res.setEncoding('binary');
res.on('data', function(chunk) {
photoData.push(chunk);
});
res.on('end', function() {
var photo = Buffer.concat(photoData);
});
res.on('error', function(err) {
console.error('Unable to download photo:', err);
});
});
在示例中,我将所有数据块存储到一个数组中,然后使用Buffer.concat()
创建一个缓冲区。这种方式更好,因为您最初将图像的数据附加到字符串上,这可能会导致损坏。