javascript - 如何从 fetch Promise 返回 Base64 数据?

标签 javascript reactjs

我想将图像从 URL 转换为 Base 64,并将其存储在某种状态中以供以后使用。

如何从 fetch() 返回数据?

我可以使用 CORS 安全图像和 HTML Canvas 使其工作,但这不适用于公共(public)域。

  openImage = (index) => {
    const url = formatURLs[index];
    const base64 = this.getBase64Image(url);

    this.setState(prevState => ({
      currentImage: index,
      currentImagebase64: base64
    }));
  }

  getBase64Image(url) {
    fetch(url).then(r => r.blob()).then(blob => {
      var reader = new FileReader();
      reader.onload = function() {
           var b64 = reader.result.replace(/^data:.+;base64,/, '');
           return b64;
      };
      reader.readAsDataURL(blob);
    });
  }

当我console.log(reader.result)时,它将按预期输出base64。

但是,当我返回 b64 时,它返回到 openImage 为“未定义”。

最佳答案

getBase64Image 是异步的,因此当以同步方式调用它时,它将返回未定义。

你可以尝试这样的事情

  openImage = async (index) => {
    const url = formatURLs[index];
    const base64 = await this.getBase64Image(url);
    this.setState(prevState => ({
      currentImage: index,
      currentImagebase64: base64
    }));
  }

  async getBase64Image(url) => {
    const response = await fetch(url);
    const blob = await response.blob();
    const reader = new FileReader();
    await new Promise((resolve, reject) => {
      reader.onload = resolve;
      reader.onerror = reject;
      reader.readAsDataURL(blob);
    });
    return reader.result.replace(/^data:.+;base64,/, '')
  }

关于javascript - 如何从 fetch Promise 返回 Base64 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57346889/

相关文章:

javascript - Angular 中区分鼠标点击和手指点击

javascript - 视频元素静音在 Chrome 中返回 false,即使属性设置为 "muted"

javascript - 是否可以仅使用 jqGrid 对来自服务器的数据进行编码?

javascript - 如何创建 String 原型(prototype)克隆并为其分配自定义函数

javascript - 尽管所有数据都正确传递,但 Redux 状态未更新

javascript - 状态更改后子组件不更新

reactjs - Reactjs - 抽屉覆盖页面内容

reactjs - React 查询调用的 onSuccess 单元测试

reactjs - 我的 react 组件中的导入做错了什么?

javascript - 警告 : Unknown DOM property class. 你是说类名吗?