我花了几个小时尝试获取图像数据作为缓冲区,搜索结果导致我使用“请求”模块,其他建议导致使用更高版本的节点中的其他模块,我无法使用它,因为我们依赖于节点 v 6.11迄今为止。
这是我的试验:
request(imageURL).pipe(fs.createWriteStream('downloaded-img-
1.jpg')).on('close', function () {
console.log('ok');
});
request(imageURL, function (err, message, response) {
fs.writeFile('downloaded-img-2.jpg', response, 'binary', function (err) {
console.log('File saved.');
});
fs.writeFile('downloaded-img-3.jpg', chunks, 'binary', function (err) {
console.log('File saved.');
})
resolve(response);
})
.on('data', function (chunk) {
chunks.push(chunk);
})
.on('response', function (response) {
});
});
“downloaded-img-1.jpg”已正确下载,但我必须避免将文件保存在磁盘上,然后将其作为流读取,这是 PRD 环境限制。因此,下一个选择是使用图像数据,如“downloaded-img-2.jpg”和“downloaded-img-3.jpg”所示,通过等待“响应”或手工制作的“块”,问题是这两个图像总是损坏,我不知道为什么?
这一切背后的意义何在?我正在尝试将图像添加到 zip 文件中的 URL 后面,并且我使用的 zip 库 (js-zip) 接受缓冲区作为输入。为什么我没有正确得到“块”或“响应”,有什么想法吗?
我在 Node 6.9.2 中测试了下面的代码,它将下载图像作为缓冲区。我还将缓冲区写入文件(只是为了测试一切是否正常!),主体对象是包含图像数据的缓冲区:
"use strict";
var request = require('request');
var fs = require('fs');
var options = {
url: "https://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Hubble2005-01-barred-spiral-galaxy-NGC1300.jpg/1920px-Hubble2005-01-barred-spiral-galaxy-NGC1300.jpg",
method: "get",
encoding: null
};
console.log('Requesting image..');
request(options, function (error, response, body) {
if (error) {
console.error('error:', error);
} else {
console.log('Response: StatusCode:', response && response.statusCode);
console.log('Response: Body: Length: %d. Is buffer: %s', body.length, (body instanceof Buffer));
fs.writeFileSync('test.jpg', body);
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)