从Firestore检索图像blob(JavaScript-版本9)

s3fp2yjn  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(120)

我正在按照here的示例在Firestore上存储和检索图像blob,但检索时遇到了问题:

const firebase_blob = doc.get('img');
const uint8_array = firebase_blob.toUint8Array();

运行代码时出现以下错误:

firebase_blob.toUint8Array is not a function at UserManager.js:91:59

使用console.log(firebase_blob);,我得到以下内容:

{
    "_byteString": {
        "binaryString": "ÿØÿà\u0000\u0010JFIF\u0000\u0001\u0001\u0000\u0000\u0001\u0000\u0001\u0000\u0000ÿâ\u0001ØICC_PROFILE\u0000\u0001\u0001\u0000\u0000\u0001È\u0000\u0000\u0000\u0000\u00040\u000(...truncated)"
    }
}

有谁能指出我的错误吗?toUint8Array是不是被另一个函数取代了?先谢谢你。

sqxo8psd

sqxo8psd1#

更新

当按照marc-anthony-b的建议编辑可复制代码时,我意识到上传到Firebase Cloud Functions会改变blob。

以下是使用Firebase updateDoc直接上传的数据:

以下是通过Firebase云函数上传的数据:

虽然类型改变了,但我意识到二进制数据仍然可以访问。在qrsngky的建议下,我使用以下代码检索了Uint8Array:

let typed_array = Uint8Array.from(img_data, e => e.charCodeAt(0) );

一旦我有了Uint8Array,我就可以像这样得到blob_url:

const blob = new Blob([typed_array]);
const blob_url = URL.createObjectURL(blob);

如果我可以只使用toUint8Array()的话,那就简单多了,但是我现在就不考虑这个问题了,谢谢!

相关问题