gpt4 book ai didi

javascript - 如何使用 Express 通过 HTTP 发送图像

转载 作者:行者123 更新时间:2023-12-02 23:20:06 26 4
gpt4 key购买 nike

我正在使用 NodeJS 开发一种 API。

我需要执行一种 getImage 方法,将与名称相对应的图像返回到 url 中(例如:localhost:8080/getImage/myImg)。

我在互联网上找到了很多教程,但问题是我不能使用 FS 中的 writeFile 和 readFile,因为我的图像与其他 JSON 信息一起存储在数组中。我存储的图像是由 tomCat 中的另一个 API 发送的,我的工作是通过设置 NodeJS API 来限制对 tomCat API 的调用。

我的问题是如何发送存储在变量/数组/json 中的图像?

我尝试了下面的代码,但是当我转到 localhost:8080/getImage/myImg 时,代码被执行,但没有返回任何内容。我没有尝试使用一种保存图像的 tmp 文件夹,因为我正在开发一个大型产品,如果我可以限制对磁盘的访问,那就太好了。

app.get('/getImage/:name', (req, res) => {
imagesArray.forEach( (image) => {
if(req.params.name === image.small_image_name) {
res.writeHead(200, {'content-type': 'image/jpeg'})
res.end(image.small_image, 'binary')
} else if (req.params.name === image.full_image_name) {
res.writeHead(200, {'content-type': 'image/jpeg'})
res.end(image.full_image, 'binary')
}
})
})

我要做的是:您使用图像名称作为参数对 url 进行 http 请求,以“下载”图像并更改主页上显示的元素的背景。

感谢您 future 的回答。祝你有美好的一天!

最佳答案

此代码将执行您希望的操作,我假设 image.small_image 和 image.full_image 包含带有图像数据的 Buffer 对象。如果图像数据存储为字节数组或base64字符串,则很容易转换为缓冲区。

app.get('/getImage/:name', (req, res) => {
const image = imagesArray.find(image => (req.params.name === image.small_image_name || req.params.name === image.full_image_name));

if (!image) {
res.status(404).send("Image not found");
return;
}

const imageBuffer = (req.params.name === image.small_image_name) ? image.small_image: image.full_image;
res.writeHead(200, { 'content-type': 'image/jpeg' })
res.end(imageBuffer, 'binary')
});

我在本地计算机上使用端口 3000,因此请求 URL 将如下所示:

http://localhost:3000/getImage/test.jpg

另一种方法是预先创建图像 map ,这将提高检索效率。请注意,这可能会增加进程的内存需求。

const imageMap = imagesArray.reduce((map, image) => { 
map[image.small_image_name] = { name: image.small_image_name, data: image.small_image };
map[image.full_image_name] = { name: image.full_image_name, data: image.full_image };
return map;
}, {});

app.get('/getImage/:name', (req, res) => {
const image = imageMap[req.params.name];
if (!image) {
res.status(404).send("Image not found");
return;
}

res.writeHead(200, { 'content-type': 'image/jpeg' })
res.end(image.data, 'binary')
});

关于javascript - 如何使用 Express 通过 HTTP 发送图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56986985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com