Base64 JPEG 图像在页面刷新时消失

问题描述 投票:0回答:1

我们有一个企业 React Typescript 项目,其中一部分是从网站上抓取图像,编码为 Base64,写入数据库,然后显示给最终用户。

这是我们代码的非常简化的示例,只是

App.tsx

const App = (): JSX.Element => {
  const jpgbase64 = "/9j/4AAQSkZJRgABAQAAAQABAA .... nveHWYNjqKqrk5I7zc/wAvhOHaHTwM/wDeA/7BPVLtD+OAIPmZfad";
  const pngbase64 = "iVBORw0KGgoAAAANSU .... lCgQUKJAQIkCASUKBJQoEFCiQECJAgElCgSUKBBQokBAiQIBJQoElCgQUKJAQIkCASUKBJQoEFCiQECJAgElCgSUKBBQokBAiQIBJQoElCgQUKJAQIkCASUKBJQoEFCiQECJAgElCgSUKBBQokBAiQIBJQoElCgQUKJAQIkCASUKBJQoEFCiQECJAgElCgSUKBBQokBAiQIBJQoElCgQUKJAQIkCAaX/AcrFIKL9KpbnAAAAAElFTkSuQmCC";

  return (
    <>
      <span className="fakeHtml">{"<div> with base64 JPEG and PNG <img>s:"}</span>
      <div className="imgHolder">
        <img src={"data:image/jpeg;base64, " + jpgbase64} />
        <img src={"data:image/png;base64, " + pngbase64}  />
      </div>
    </>
  );
};

export default App; 

jpgbase64
pngbase64
都是有效的base64字符串。

奇怪的事情是:当我们在 Firefox 中打开这个简单的示例页面时,最初两个图像都被加载了:

屏幕截图 - 第一个站点加载

但是如果我们通过在地址栏中选择站点地址然后按 Enter 键来刷新页面,JPEG 图像就会消失,但 PNG 仍然存在!

然后按 F5 不会返回图像:

屏幕截图 - 刷新后

请随时查看如何重现的短视频

问题:如何让JPEG图片在页面刷新后不消失?

同时,

<div className="imgHolder">
存在于DOM中,并且里面有两个图像;控制台中没有错误/警告。除了我提到的问题之外,一切似乎都很好。

当我们在 Chrome 中打开这个简单的示例页面时,即使我们多次刷新页面,两个图像都会正确加载。

如果只是通过按 Ctrl + S 从浏览器保存页面,然后从保存的文件中打开,一切似乎都工作正常。

javascript reactjs image firefox base64
1个回答
0
投票

查看您的开发者控制台。出现错误,表明图像被截断。 Firefox 无法正确缓存它。显然其他浏览器可以,但对于较大的文件也可能会失败。

Base64 是一个由四个 6 位字符(A-Z、a-z、0-9)组成的字符串。 Base64 格式的图像始终比二进制图像文件大至少三分之一。您用户的 CPU 需要做额外的工作来解码图像。

您的应用程序能够使用 blob 吗?如果是这样,那么您将可以使用 createObjectURL

© www.soinside.com 2019 - 2024. All rights reserved.