是否可以在浏览器中 read/decode .avro uInt8Array 容器文件 Javascript ?

Is it possible to read/decode .avro uInt8Array Container File with Javascript in Browser?

我正在尝试解码从网络服务器加载的 .avro 文件。

因为 uInt8Array 的字符串版本以
开头 “来自 S3 的缓冲区 Objavro.schema�{"type":"record","name":"Destination",..."
我假设它是 avro Container File

我发现“avro.js' and 'avsc”是使用 .avro 格式和 javascript 的工具,但阅读文档听起来好像只能在 [=25= 中解码容器文件],而不是在浏览器中。 (FileDecoder/Encoder 方法将文件路径作为字符串,而不是 uInt8Array)

我是不是理解错了,还是有其他方法可以使用 javascript 在浏览器中解码 .avro 容器文件?

幸运的是,我找到了一种使用 avscbroserify

的方法
avro.createBlobDecoder(blob, [{options}])
[avro.js - 浏览器之前]
var avro = require('avsc');

const AVRO = {

decodeBlob(blob) {

        let schema, columnTitles, columnTypes, records = []

        return new Promise((resolve) => {
            avro.createBlobDecoder(blob, {
                // noDecode: true
            })
                .on('metadata', (s) => {
                    schema = s
                    columnTitles = schema.fields.map(f => f.name)
                    columnTypes = schema.fields.map(f => f.type)
                })
                .on('data', (data) => {
                    records.push(data)
                })
                .on('finish', () => {
                    resolve(
                        {
                            columnTitles: columnTitles,
                            columnTypes: columnTypes,
                            records: records
                        }
                    )
                })
        })
    }
}

module.exports = AVRO
[package.json]
"scripts": {
    "avro": "browserify public/avro.js --s AVRO > public/build/avro.js"
  }
[someOtherFile.js]
//s3.getObject => uInt8array

const blob = new Blob([uInt8array])  //arr in brackets !important

const avroDataObj = await AVRO.decodeBlob(blob)

感谢发帖!

下面是我对 avro/binary 与 axios 的集成,以防它帮助任何其他尝试实现浏览器端解码的人:

[浏览器之前]

const axios = require('axios')
const avro = require('avsc')

const config = {
  responseType: 'blob'
};

const url = 'https://some-url.com'

axios.get(url, config)
.then(res => {
  avro.createBlobDecoder(res.data)
    .on('metadata', (type) => console.log(type))
    .on('data', (record) => console.log(record))
})
.catch(e => console.error(e))