emscripten 如何保存文件到本地

本文主要描述一种empscritpen开发体系下,怎么将文件保存到本地的方法。本文描述方法参考https://groups.google.com/forum/#!topic/emscripten-discuss/xnTzhcsMj4U实现,亲测可行。

 empscripten是一款编译器,他负责把clang编译的bitcode转换为符合asm.js或者webAssembly规范的js代码,这样可以使得大量的c/cpp库直接在web上运行,避免了反复开发。更多的概念不是本文描述的重点,所以不深入说明,请到官网查看emscripten.org。

 js代码运行在浏览器的sandbox模型中,无法操作本地文件,所以emscripten中file system API的操作皆为sandbox中操作,那么想要把文件保存到本地怎么办?当然想到的自然是从sandbox中下载文件,此方法行之有效,流程简单。至于其他的如local storage经反复权衡后还是采用从沙盒下载的方法。

    实现方式如下:

    1.下载js文件到网站https://github.com/eligrey/FileSaver.js,网站怎么部署请自行查询。

    2.在html页加入以下代码

<script src="FileSaver.js"> </script>
<script>
  function saveFileFromMemoryFSToDisk(memoryFSname,localFSname)     // This can be called by C++ code
  {
     var data=FS.readFile(memoryFSname);
     var blob;
     var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
     if(isSafari) {
        blob = new Blob([data.buffer], {type: "application/octet-stream"});
     } else {
        blob = new Blob([data.buffer], {type: "application/octet-binary"});
     }
     saveAs(blob, localFSname);
  }
</script>

  3.在c++代码中调用2处的方法

   emscripten_run_script("saveFileFromMemoryFSToDisk('/binaryfile','binaryfile')");

执行后会在浏览器提示下载文件,保存到本地即可。本着拿来使用的原则并未深究FileServer.js,估计是点击URL下载资源的方式,网上已有提供此思路从sandbox下载文件,只是FileServer.js让我们少写一些代码。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值