我试图将图像保存到indexeddb,然后在react应用程序中获取并显示它们。我的方法是将图像转换为blob,并将blob url保存到indexeddb,然后在需要显示时,获取blob url并将图像url设置为. src。
我如何创建blob
fetch(imgurl, {
mode: 'no-cors',
method: "get",
headers: {
"Content-Type": "application/json"
}
})
.then(response => response.blob())
.then(async images => {
var blob_url = URL.createObjectURL(images)
var blobA = blob_url.replace("blob:","")
var blobB = blobA.replace('"','')
这是bloburl blob:http://localhost:3000/d 7a 55 f39-b496- 476 b-8 c3 c-857874 bd 107 c
然后删除blob:并将此URL保存在indexeddb中以便在需要时获取http://localhost:3000/d 7a 55 f39-b496 - 476 b-8 c3 c-857874 bd 107 c
这是我需要使用斑点图像的地方
import React from "react";
import { Row, Col, Container, Image } from 'react-bootstrap';
function Item({ item }) {
const imgurl = item.productimg
fetch(imgurl)
.then(res => res.blob()) // Gets the response and returns it as a blob
.then(async blob => {
const test = await blobToImage(blob)
console.log("image test",test)
let objectURL = URL.createObjectURL(blob);
let myImage = document.getElementById('myImg')
myImage.src = objectURL;
});
return (
<div className="item" id={item.id}>
<Row>
<Col>
<Image id="myImg" width="50" height="58" rounded />
</Col>
<Col xs={6}>
<div className="item-info">
<p>{item.name}</p>
</div>
</Col>
<Col>3 of 3</Col>
</Row>
<div className="item-actions">
<button className="btn-remove">X</button>
</div>
</div>
);
}
export default Item;
项包含所有productdata,包括保存的blob url。问题是图像没有显示,我不知道为什么。
我可能做错了什么,我如何显示图像
2条答案
按热度按时间sauutmhj1#
不要修改
Blob
的URL。当您从
Blob
的URL字符串中取出blob:
部分时,浏览器不再知道您正在引用Blob
。相反,在使用URL.createObjectURL
创建URL后,请尝试将其单独保留。最重要的是,当组件与外部资源同步时(如获取数据),您应该使用React's
useEffect
hook。React示例
你可以view this example live at StackBlitz。
纯JavaScript示例
祝你好运
v1l68za42#
The URL lifetime is tied to the document in the window on which it was created..ObjectURL不应保存在某个位置。您可以将图像转换为base64 and store as data-uri。