File io 一次从emscripten读取用户提供的大文件

File io 一次从emscripten读取用户提供的大文件,file-io,emscripten,webassembly,html5-filesystem,File Io,Emscripten,Webassembly,Html5 Filesystem,我正在寻找一个API,使我能够读取通过块提供的文件(或任何其他方法,允许从浏览器访问用户文件)的时间。我正在读取大文件,所以我不想将整个文件加载到内存中 我的用例是,我使用的是用emcc编译的ffmpeg库,我不想用它来处理多媒体文件。我可以实现自己的AVIOContext,但要实现它,我需要相当于C函数fread和fseek的函数 我正在使用WORKERFS文件系统类型查看FS API,但我不清楚是否可以使用DOM中的file对象从worker线程装入它。我可以从worker线程装入带有WOR

我正在寻找一个API,使我能够读取通过块提供的文件(或任何其他方法,允许从浏览器访问用户文件)的时间。我正在读取大文件,所以我不想将整个文件加载到内存中

我的用例是,我使用的是用emcc编译的ffmpeg库,我不想用它来处理多媒体文件。我可以实现自己的AVIOContext,但要实现它,我需要相当于C函数fread和fseek的函数


我正在使用WORKERFS文件系统类型查看FS API,但我不清楚是否可以使用DOM中的file对象从worker线程装入它。

我可以从worker线程装入带有WORKERFS的文件

最简单的例子:

main.html:


const-worker=new-worker(“worker.js”);
函数onClick(){
常量f=document.getElementById(“文件中”).files[0];
worker.postMessage([f]);
}
worker.js

onmessage=function(e){
常数f=e.data[0];
FS.mkdir(“/work”);
mount(WORKERFS,{files:[f]},'/work');
console.log(Module.read_文件('/work/'+f.name));
}
self.importScripts('hello.js');
hello.js是用hello.cpp编译的 (
emcc--bind-lworkerfs.js-o hello.js hello.cpp-s WASM=1
):

#包括
#包括
#包括
#包括
#包括
使用名称空间emscripten;
std::string read_文件(const std::string&fn)
{
标准:iff流(fn);
std::字符串行;
std::getline(f,line);
回流线;
}
EMSCRIPTEN_绑定(hello){
函数(“读取文件”和“读取文件”);
}

是否尝试将大型文件从web浏览器传递到WebAssembly?