javascript - 使用 fetch API 请求 blob 图像并转换为 base64

标签 javascript base64 blob fetch-api

我有一些图像将显示在 React 应用程序中。我向服务器执行 GET 请求,该服务器返回 BLOB 格式的图像。然后我将这些图像转换为 base64。最后,我在图像标签的 src 属性中设置了这些 base64 字符串。

最近我开始使用 Fetch API。我想知道是否有办法在“一次”中进行转换。

下面是一个例子来解释我到目前为止的想法和/或如果这甚至可以通过 Fetch API 实现。我还没有在网上找到任何东西。

  let reader = new window.FileReader();
  fetch('http://localhost:3000/whatever')
  .then(response => response.blob())
  .then(myBlob => reader.readAsDataURL(myBlob))
  .then(myBase64 => {
    imagesString = myBase64
  }).catch(error => {
    //Lalala
  })

最佳答案

FileReader.readAsDataURL的返回不是 promise 。你必须用旧的方式来做。

fetch('http://localhost:3000/whatever')
.then( response => response.blob() )
.then( blob =>{
    var reader = new FileReader() ;
    reader.onload = function(){ console.log(this.result) } ; // <--- `this.result` contains a base64 data URI
    reader.readAsDataURL(blob) ;
}) ;
通用功能:
function urlContentToDataUri(url){
    return  fetch(url)
            .then( response => response.blob() )
            .then( blob => new Promise( callback =>{
                let reader = new FileReader() ;
                reader.onload = function(){ callback(this.result) } ;
                reader.readAsDataURL(blob) ;
            }) ) ;
}

//Usage example:
urlContentToDataUri('http://example.com').then( dataUri => console.log(dataUri) ) ;

//Usage example using await:
let dataUri = await urlContentToDataUri('http://example.com') ;
console.log(dataUri) ;

关于javascript - 使用 fetch API 请求 blob 图像并转换为 base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44698967/

相关文章:

javascript - 如何使用 jQuery getJSON() 访问从外部源接收的 JSON 元素?

javascript - 在 Javascript/Jquery 中将 URL 图像转换为 Base64 或 Blob 的简单方法

image - 加载图像并等待 image.complete 后再处理数据

php - 在 iOS 上从网页请求 BLOB

mysql - 您主要是归档二进制数据而不是提供服务吗?将 BLOB 存储在 MySQL 中还是存储在 S3 上更好?

javascript - 函数内的 AngularJS 摘要

javascript - 鼠标离开窗口提醒弹出--Moodle

unit-testing - 是否有可用于完全测试 base64 编码/解码器的数据集?

iphone - 将 png/pdf 文件存储在 sqlite 中

javascript - Angularjs 从 JSON 文件中读取数据