离子本机文件插件:file.readAsArrayBuffer()=>未捕获的RangeError:数组缓冲区分配失败

时间:2019-05-06 14:38:00

标签: cordova ionic-framework cordova-plugins ionic4 ionic-native

我在Ionic做一个实习项目。在这个项目中,我必须读取mbtiles文件(通过@ionic-native/file插件)并将它们放在传单中(通过leaflet-tilelayer-mbtiles-ts传单插件)。我是这样的:

this.file.readAsArrayBuffer(PATH, MBITILEFILENAME).then(res =>{
                L.tileLayer.mbTiles(res,{
                    maxZoom: 18,
                    attribution: "mbtiles"
                }).addTo(this.map)
            })

由于某些原因我不使用Ionic测试应用程序,因此必须直接在手机上测试我的应用程序,并使用Android Studio控制台查看发生了什么情况。

这是问题所在
当我使用一个较小的mbtiles文件(10Mo,测试文件)时,它可以工作,但是当我使用较大的文件(880Mo,该文件必须在产品环境中读取)时,Android控制台向我显示以下内容:

  

I /铬:[INFO:CONSOLE(312)]“未捕获的RangeError:数组缓冲区   分配失败”,来源:http://localhost/cordova.js(312)

我尝试搜索file.readAsArrayBuffer()的大小限制,但未找到任何内容。

您能告诉我file.readAsArrayBuffer()的大小限制是多少吗?有什么解决方案可以绕过Ionic的限制吗?还是可以解决我问题的东西?

1 个答案:

答案 0 :(得分:0)

我找到了怎么做,但忘了发布答案。我使用了来自“@ionic-native/ionic-webview”的 WebView,所以地图不需要完全加载,只需要部分。

var pathToFile =
    this.file.externalDataDirectory + PATHTOFILE
var truePath = WebView.convertFileSrc(pathToFile);
L.tileLayer(truePath + "/{z}/{x}/{y}.png", {
    maxZoom: 18,
    attribution: "local"
}).addTo(this.map);