【问题标题】:Synchronously convert Blob to base64 string in Javascript在Javascript中将Blob同步转换为base64字符串
【发布时间】:2015-01-31 23:04:27
【问题描述】:

我发现对数据 Blob 进行 base64 编码以将其放入 JSON 字符串的唯一方法是使用 asyncronous readAsDataUrl() 函数。

var reader = new window.FileReader();
reader.readAsDataURL(blob); 
reader.onloadend = function() {
    base64data = reader.result;                
    console.log(base64data );
}

我的问题是我必须为JSON.stringify(object, replacer) 使用 同步 替换函数来告诉它如何序列化 Blob。

var replacer = function (key, value) {
    if (value instanceof Blob) {
        return blobToBase64(value);
    }
    return value;
}

如何结合这两种(异步和同步)方法?

有没有更好的方法来同步对这些数据进行base64编码?

【问题讨论】:

    标签: javascript json asynchronous base64 stringify


    【解决方案1】:

    应该有一个用于读取文件的同步 API - FileReaderSync。它的文档说明了以下内容:

    8.6 阅读线程

    Web Workers 允许使用同步文件或 Blob 读取 API,因为这样的读取
    on threads 不要阻塞主线程。本节定义了一个同步 API,
    可以在Workers[Web Workers]中使用。
    Workers 可以使用异步 API(FileReader 对象)和同步 API
    (FileReaderSync 对象)。

    Web Workers 的文档可通过上面引用中的链接获得。尽管我不熟悉 Web Workers API,但上述文档提供了格式良好的简单示例,这些示例给人一种足够直观的 API 的印象,可以快速开始使用它。

    我没有测试过,但这里是我会如何重写你的代码片段:

    var jsonfyObjectWhichMightBeABlob = function(obj){
        var worker = new Worker('jsonfyBlobSynchroniously.js');
        worker.onmessage = function (event) {
            return event.data;
            //or do something with event.data wich should contain the JSON string
        };
        worker.postMessage(obj);
    };  
    

    jsonfyBlobSynchroniously.js 应包含以下内容:

    onmessage = function (event) {
        var replacer = function(key,value){
            if(value instanceof Blob){
                var reader = new window.FileReaderSync();
                return reader.readAsDataURL(value);
            }else{
                return value;
            }
        }
        postMessage( JSON.stringify(event.data,replacer) );
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 2015-12-20
      • 2022-08-16
      • 2015-04-22
      • 2015-03-14
      • 2018-10-07
      • 2011-04-02
      相关资源
      最近更新 更多