簡體   English   中英

在Javascript中將Blob同步轉換為base64字符串

[英]Synchronously convert Blob to base64 string in Javascript

我發現對base64編碼以將其放入JSON字符串中的數據Blob的唯一方法是使用異步 readAsDataUrl()函數。

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

我的問題是我必須對JSON.stringify(object, replacer)使用一個同步 JSON.stringify(object, replacer)函數JSON.stringify(object, replacer)以告訴它如何對Blob進行序列化。

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

如何合並這兩種(異步和同步)方法?

有沒有更好的方法來對這些數據進行base64 同步編碼?

應該有一個用於讀取文件的同步 API- FileReaderSync 它的文檔指出以下內容:

8.6在線程上閱讀

Web Worker允許使用同步File或Blob讀取API,因為此類讀取
在線程上不會阻塞主線程。 本部分定義了同步API,
可以在Workers [Web 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) );
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM