javascript - 缓存来自 Lorem Picsum 的图像
问题描述
所以,我想用非常好的https://picsum.photos/
方法来获取一些随机图像并将它们缓存起来供以后的用户使用。
如果我只是简单地设置src
一个图像标签https://picsum.photos/id/493/200/300
- 它工作得很好而且很漂亮,但我希望缓存这些图像。
请求的内容类型是image/jpeg
。
我正在使用Axios
我的请求,所以我抓住了response.data
,但我不确定下一步该做什么。
我试着把很多东西放在src
我的img
:
- 简单地
response.data
btoa(unescape(encodeURIComponent(response.data)));
data:image/jpeg;base64,${btoa(unescape(encodeURIComponent(response.data)))}};
现在我已经没有想法了。
我想我的第一个问题是我不太确定服务返回了什么。所述图像的字节数组?如果我typeof
得到string
,编码的字节数组?非常混乱。
在这里您可以找到生成的img
元素:https ://pastebin.com/9F0gnC7D
解决方案
搞定了,第一个重要信息:如果响应中没有Content-Encoding
标头,则意味着端点返回原始字节。
第二个也是最后一个:Axios
返回一个 JSON,你不能把二进制放在 JSON 中,所以在转换中string
它会被破坏,但有一个修复:
fetchRandomPic: async (): Promise<any> => {
const response = await Axios.get(URLS.RANDOM_PIC, { ...axiosConfig, responseType: "arraybuffer" });
return `data:image/jpeg;base64,${Buffer.from(response.data, "binary").toString("base64")}`;
}
现在像魅力一样工作:)