Javascript 如何将url中的图像加载到nodejs中的缓冲区中

Javascript 如何将url中的图像加载到nodejs中的缓冲区中,javascript,node.js,express,Javascript,Node.js,Express,我是nodejs新手,正在尝试设置一个服务器,在那里我可以从图像中获取exif信息。我的图像在S3上,所以我希望能够将S3URL作为参数传入并从中获取图像 我正在使用下面的ExifImage项目获取exif信息,并根据他们的文档: “您也可以将缓冲区传递给ExifImage,而不是在文件系统中提供图像的文件名。” 如何从url将图像加载到节点中的缓冲区,以便将其传递给ExifImage函数 ExifImage项目: 谢谢你的帮助 使用库 请求(“”,函数(错误,响应,缓冲区){ //做点什么

我是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);
    }
})();