我是nodejs的新手,我正在尝试建立一个服务器,在那里我可以从一个图像中获取exif信息,我的图像在S3上,所以我希望能够将s3 url作为一个参数传入,并从它那里获取图像。
我正在使用下面的ExifImage项目来获取exif信息,并根据他们的文档:
“除了在文件系统中提供映像的文件名之外,您还可以向ExifImage传递缓冲区。”
如何将图像从url加载到节点中的缓冲区,以便将其传递给ExifImage函数
ExifImage项目:https://github.com/gomfunkel/node-exif
谢谢你的帮忙!
9条答案
按热度按时间flvtvl501#
请尝试按如下方式设置请求:
将
encoding
设置为null
将导致请求输出缓冲区而不是字符串。chhkpiq42#
使用axios:
myzjeezk3#
plupiseo4#
只有在阅读到
encoding: null
是必需的并将其作为请求的参数提供之后,我才能够解决这个问题。这将从url下载图像并生成一个包含图像数据的缓冲区。
使用请求库-
注意:省略
encoding: null
将导致一个不可用的字符串,并且不在缓冲区中。Buffer.from也不能正常工作。这是用节点8测试的
l3zydbqr5#
使用request库。
另外,您可能会对node-image-headers感兴趣,它听起来像是需要一个流,所以它甚至不需要从S3下载完整的映像来处理头部。
fv2wmkja6#
下面是一个使用原生
https
库的解决方案。如果你在寻找javascript,请随意删除这些类型。
我更喜欢这种方法,因为它不依赖于第三方库或过时的请求库。
v2g6jxz67#
request
已过时,应尽可能避免使用。好的替代方案包括got(仅适用于node.js)和axios(也支持浏览器)。
got
的示例:使用异步/await语法:
4smxwvx58#
你可以那样做
blmhpbnm9#
完成此操作的最简单2行代码
在node.js中有一个名为node-fetch的内置模块。你可以使用它从url下载图像并用作缓冲区,然后你可以将该缓冲区保存在任何文件系统中,如s3-bucketazure等。