我是nodejs的新手,我正在尝试设置一个服务器,我从图像中获取exif信息。我的图像在S3上,所以我希望能够将s3 url作为参数传入并从中获取图像。
我使用下面的ExifImage项目获取exif信息并根据他们的文档:
“您可以将缓冲区传递给ExifImage,而不是在文件系统中提供图像文件名。”
如何将图像从网址加载到节点中的缓冲区,以便将其传递给ExifImage函数
ExifImage项目: https://github.com/gomfunkel/node-exif
感谢您的帮助!
答案 0 :(得分:42)
尝试设置这样的请求:
var request = require('request').defaults({ encoding: null });
request.get(s3Url, function (err, res, body) {
//process exif here
});
将encoding
设置为null
将导致请求输出缓冲区而不是字符串。
答案 1 :(得分:7)
使用request库。
request('<s3imageurl>', function(err, response, buffer) {
// Do something
});
此外,您可能会对node-image-headers感兴趣。听起来它需要一个流,所以它甚至不必从S3下载完整的图像来处理标题。
使用正确的回调签名进行了更新。
答案 2 :(得分:7)
只有在读取到encoding: null
是必需并将其作为请求参数提供后,我才能解决该问题。
这将从URL下载图像,并产生包含图像数据的缓冲区。
使用请求库-
const request = require('request');
let url = 'http://website.com/image.png';
request({ url, encoding: null }, (err, resp, buffer) => {
// Use the buffer
// buffer contains the image data
// typeof buffer === 'object'
});
注意:省略encoding: null
将导致字符串不可用,而不是缓冲区中。 Buffer.from也无法正常工作。
这已在Node 8上进行了测试
答案 3 :(得分:6)
使用axios:
const response = await axios.get(url, { responseType: 'arraybuffer' })
const buffer = Buffer.from(response.data, "utf-8")
答案 4 :(得分:1)
request
已过时,应尽可能避免。
好的选择包括got(仅用于node.js)和axios(也支持浏览器)。
got
的示例:
npm install got
使用异步/等待语法:
const got = require('got');
const url = 'https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png';
(async () => {
try {
const response = await got(url, { responseType: 'buffer' });
const buffer = response.body;
} catch (error) {
console.log(error.body);
}
})();
答案 5 :(得分:1)
const fetch = require("node-fetch");
const getBuffer = async (url) => {
try {
const response = await fetch(url);
const arrayBuffer = await response.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
return buffer;
} catch (error) {
return { error };
}
};