H5如何读取二进制文件?

我需要一个读取自定义二进制文件的方法,类似于原生平台的getDataFromFile方法,找半天没有找到相关API

1赞

DataView ArrayBuffer Blob

如果能拿到这个文件格式都是可以的,关键现在只能拿到string类型,已经丢失部分数据了

只能@大法了@jare

https://blog.csdn.net/langzi7758521/article/details/51566858

我是读文件大哥 不是http请求

如果是网页端,你的文件总是放在服务器上吧,服务器上你不需要先http么?通过http,指定接受数据为ArrayBuffer,拿到数据后解析。

如果你是原生,jsb.fileUtils.getDataFromFile

h5就是要通过http请求读文件啊

那这个文件如何缓存,如果本地已经有了,不能继续下载了

有没有大神可以给个方案

星期一了该顶顶了

Web端,楼上已有回复,Native端的话,需要自己封装JSB接口,目前引擎没有二进制数据的操作接口。

web端他说的还是不对啊,就算第一次http读,如何缓存到本地?缓存到本地的如何重新读?不可能每次都下载这个文件的

为何不对,我看就很对啊,读文件要发起http请求,请求到数据之后的缓存处理是另做的需求啊

浏览器会自动对文件做缓存的,这个是浏览器的功能,引擎这边不做解释。

可能是我没表达清楚,我希望可以声明个cc.Binary的文件类型,然后用md5会非常方便

网页端是依托浏览器环境的 不是想怎么样怎么样的

通过 jsb.fileUtils.getDataFromFile 得到Uint8Array,然后通过DataView 不是可以操控了么?
至于Native缓存
1,下载之前先看缓存目录有没有,如果有加载缓存目录,否则去下载
2,下载完成后写到缓存

浏览器环境下,JS控制不了浏览器缓存,也不知道浏览器是否有缓存,这个是浏览器根据自身的缓存策略和http请求的header中Expires/Cache-Control等字段(在服务端设置,或在HTML的meta标签中设置)共同决定的。一般情况下,你第一次在JS中用http请求文件,浏览器会下载文件并缓存到浏览器的缓存文件夹,第二次在JS中用http读,若缓存未过期,浏览器会使用缓存的文件,并没有每次都下载。你可以看一下:彻底弄懂HTTP缓存机制及原理
如果你希望做JS可控的缓存且文件体积不大,那用localStorage(各种浏览器的容量限制在2M~5M左右),在Cocos Creator中就是cc.sys.localSotrage
另外有些浏览器支持FileSystem API,可以用JS模拟文件系统读写大文件。不过浏览器支持不佳,最好使用Chrome, Firefox, Edge。