Javascript 如何将url中的图像加载到nodejs中的缓冲区中
我是nodejs新手,正在尝试设置一个服务器,在那里我可以从图像中获取exif信息。我的图像在S3上,所以我希望能够将S3URL作为参数传入并从中获取图像 我正在使用下面的ExifImage项目获取exif信息,并根据他们的文档: “您也可以将缓冲区传递给ExifImage,而不是在文件系统中提供图像的文件名。” 如何从url将图像加载到节点中的缓冲区,以便将其传递给ExifImage函数 ExifImage项目: 谢谢你的帮助 使用库Javascript 如何将url中的图像加载到nodejs中的缓冲区中,javascript,node.js,express,Javascript,Node.js,Express,我是nodejs新手,正在尝试设置一个服务器,在那里我可以从图像中获取exif信息。我的图像在S3上,所以我希望能够将S3URL作为参数传入并从中获取图像 我正在使用下面的ExifImage项目获取exif信息,并根据他们的文档: “您也可以将缓冲区传递给ExifImage,而不是在文件系统中提供图像的文件名。” 如何从url将图像加载到节点中的缓冲区,以便将其传递给ExifImage函数 ExifImage项目: 谢谢你的帮助 使用库 请求(“”,函数(错误,响应,缓冲区){ //做点什么
请求(“”,函数(错误,响应,缓冲区){
//做点什么
});
此外,您可能会感兴趣。听起来它需要一个流,所以它甚至不需要从S3下载完整的图像来处理头文件
已使用正确的回调签名进行更新。尝试如下设置请求:
var request = require('request').defaults({ encoding: null });
request.get(s3Url, function (err, res, body) {
//process exif here
});
将
encoding
设置为null
将导致请求输出一个缓冲区而不是字符串。只有在读取到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'
});
注意:省略编码:null
将导致字符串不可用,而不是缓冲区中。Buffer.from也无法正常工作
这是用节点8测试的,使用:
请求
已被弃用,应尽可能避免
好的替代方案包括(仅适用于node.js)和(也支持浏览器)
获得的示例
:
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);
}
})();
const fetch=require(“节点提取”);
const getBuffer=async(url)=>{
试一试{
const response=等待获取(url);
const arrayBuffer=等待响应。arrayBuffer();
const buffer=buffer.from(arrayBuffer);
返回缓冲区;
}捕获(错误){
返回{error};
}
};
我尝试使用请求方法,但缓冲区始终为空。如果我直接在浏览器中输入imageurl,它可以正常加载。你知道为什么会这样吗?对不起,我回电话的签名错了。我已经更新了答案。谢谢你的帮助!我是否需要担心以这种方式加载太多的图像,或者它们是自动删除的?V8 Javascript引擎会对未使用的内存进行垃圾收集,所以您应该不会介意。您提到它会“输出”一个缓冲区。你能描述一下输出在哪里吗?请求没有返回值。@TamusJRoyce这里有一个更完整的示例:uri缺失:请求({uri:url,encoding:null},(err,resp,buffer)=>{它工作得很好。这应该是2021年可以接受的答案
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);
}
})();