Cod*_*eyB 24 javascript node.js express
我是nodejs的新手,我正在尝试建立一个服务器,我从图像中获取exif信息.我的图像在S3上,所以我希望能够将s3 url作为参数传递并从中获取图像.
我使用下面的ExifImage项目来获取exif信息并根据他们的文档:
"您可以将缓冲区传递给ExifImage,而不是在文件系统中提供图像文件名."
如何从URL中将图像加载到节点中的缓冲区,以便将其传递给ExifImage函数
ExifImage项目:https: //github.com/gomfunkel/node-exif
谢谢你的帮助!
Dan*_*ohn 47
尝试设置这样的请求:
var request = require('request').defaults({ encoding: null });
request.get(s3Url, function (err, res, body) {
//process exif here
});
Run Code Online (Sandbox Code Playgroud)
设置encoding为null将导致请求输出缓冲区而不是字符串.
小智 32
import fetch from "node-fetch";
let fimg = await fetch(image.src)
let fimgb = Buffer.from(await fimg.arrayBuffer())
Run Code Online (Sandbox Code Playgroud)
Dep*_*ang 16
使用axios:
const response = await axios.get(url, { responseType: 'arraybuffer' })
const buffer = Buffer.from(response.data, "utf-8")
Run Code Online (Sandbox Code Playgroud)
Yeh*_*tan 11
I was able to solve this only after reading that encoding: null is required and providing it as an parameter to request.
This will download the image from url and produce a buffer with the image data.
Using the request library -
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'
});
Run Code Online (Sandbox Code Playgroud)
注意:省略encoding: null将会导致无法使用的字符串而不是缓冲区。Buffer.from也无法正常工作。
这已经在节点8上进行了测试
这是使用本机https库的解决方案。
import { get } from "https";
function urlToBuffer(url: string): Promise<Buffer> {
return new Promise((resolve, reject) => {
const data: Uint8Array[] = [];
get(url, (res) => {
res
.on("data", (chunk: Uint8Array) => {
data.push(chunk);
})
.on("end", () => {
resolve(Buffer.concat(data));
})
.on("error", (err) => {
reject(err);
});
});
});
}
const imageUrl = "https://i.imgur.com/8k7e1Hm.png";
const imageBuffer = await urlToBuffer(imageUrl);
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找 javascript,请随意删除这些类型。
我更喜欢这种方法,因为它不依赖于第三方库或已弃用的请求库。
使用请求库.
request('<s3imageurl>', function(err, response, buffer) {
// Do something
});
Run Code Online (Sandbox Code Playgroud)
此外,您可能会对node-image-headers感兴趣.听起来它需要一个流,所以甚至可能不必从S3下载完整的图像来处理标题.
更新了正确的回调签名.
you can do it that way
import axios from "axios";
function getFileContentById(
download_url: string
): Promise < Buffer > {
const response = await axios.get(download_url, {
responseType: "arraybuffer",
});
return Buffer.from(response.data, "base64");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29893 次 |
| 最近记录: |