如何在浏览器中的javascript中读取hdf5文件

Sri*_*vas 6 javascript hdf5 node.js browserify

我有使用c ++ application.i创建的hdf5文件想要使用javascript在浏览器中读取相同的hdf5文件.

Hdf5文件将使用xhr或Web套接字请求从服务器下载,文件的内容将存储在javascript变量中,然后我想读取变量的内容.

请告诉我任何可以在浏览器中阅读hdf5的javascript库.

我试过" https://github.com/HDF-NI/hdf5.node ",但它只支持nodejs.

是否可以转换上述库以支持在浏览器内阅读.

L.L*_*urg 1

我发现最好的两个库是js Fiveh5wasm

示例代码jsfive

$(document).ready(function() {
    $("#datafile").change(async function loadData() {
        var file_input = $("#datafile")[0];
        var file = file_input.files[0]; // only one file allowed
        let datafilename = file.name;
        let reader = new FileReader();
        reader.onloadend = function(evt) { 
          let barr = evt.target.result;
          var f = new hdf5.File(barr, datafilename);
          let value = f.get('main').value
          let attrs = f.get('main').attrs
          // do somthing with f
        }
    })
})
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html lang="eng">

<head>
</head>

<body>

  <input type="file" id="datafile" name="file">
  
  <!-- Import JQuery -->
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <!-- Import JSFive -->
  <script src="https://cdn.jsdelivr.net/npm/jsfive@0.3.7/dist/hdf5.js">
    <!-- Import main JS -->
    <
    script src = "app.js" >
  </script>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

示例代码h5wasm

import * as hdf5 from "https://cdn.jsdelivr.net/npm/h5wasm@latest/dist/esm/hdf5_hl.js";

await hdf5.ready;

$(document).ready(function() {
    $("#datafile").change(async function loadData() {
        let file = $("#datafile")[0].files[0];
        let data_filename = file.name;
        let ab = await file.arrayBuffer();
        hdf5.FS.writeFile(data_filename, new Uint8Array(ab));
        let f = new hdf5.File(data_filename, "r");
        // do somthing with f
        f.close()
    })
})
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html lang="eng">

<head>
</head>

<body>
    <input type="file" id="datafile" name="file">

    <!-- Import JQuery -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <!-- Import main JS -->
    <script type="module" src="app.js" ></script>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

jsfive回调也很有趣:

function storeTarget(result, file_name) {
  f = new hdf5.File(result, file_name);
}

$("#datafile").change(async function loadSource() {
    var file_input = $("#datafile")[0];
    var file = file_input.files[0];
    let datafilename = file.name;
    const reader = new FileReader();
    reader.readAsArrayBuffer(file);
    reader.onload = () => storeTarget(reader.result, datafilename);
})
Run Code Online (Sandbox Code Playgroud)