在cordova应用程序中存储图像以获得脱机支持

在cordova应用程序中存储图像以获得脱机支持,cordova,Cordova,目前,我正在我的cordova应用程序中将图像以base64字符串本地存储在sqlite数据库中,以获得脱机支持。有人知道用cordova插件文件将它们存储为文件是否更好/更快吗?或者有没有更好的方法来存储图像以获得脱机支持?在这方面有什么建议或经验吗?谢谢这取决于您如何使用图像以及性能对您的重要性 在我自己基于Cordova的应用程序中,我下载地图瓷砖图像供脱机使用,并使用HTML5画布显示它们。 因此,在我的例子中,性能对于确保贴图的缩放/平移平滑非常重要 在我的解决方案中,我使用将包含图像

目前,我正在我的cordova应用程序中将图像以base64字符串本地存储在sqlite数据库中,以获得脱机支持。有人知道用cordova插件文件将它们存储为文件是否更好/更快吗?或者有没有更好的方法来存储图像以获得脱机支持?在这方面有什么建议或经验吗?谢谢

这取决于您如何使用图像以及性能对您的重要性

在我自己基于Cordova的应用程序中,我下载地图瓷砖图像供脱机使用,并使用HTML5画布显示它们。 因此,在我的例子中,性能对于确保贴图的缩放/平移平滑非常重要

在我的解决方案中,我使用将包含图像的zip下载到
cordova.file.cacheDirectory
(请参阅)。然后,我使用将其解压缩到
cordova.file.dataDirectory
。我的应用程序通过在Javascript中创建
new image()
对象并将
src
属性设置为
cordova.file.dataDirectory
中图像的本地路径来读取文件中的图像数据。然后,我使用将图像数据复制到画布。 此过程的性能非常高效,可以在Android和iOS设备上平滑地平移/缩放地图分幅

但是,由于iOS的WKWebView中缺少对
文件://
协议的支持,我被迫继续在iOS上的应用程序中使用UIWebView(我没有
cordova插件WKWebView引擎
)。 我尝试了一些WKWebView的变通方法,包括通过与WKWebView插件捆绑在一起的本地Web服务器读取图像(即
http://localhost:8080/path/to/myimage.png
),通过
cordova插件文件
读取图像作为数组缓冲区,并通过
cordova插件文件
读取图像作为base-64,但所有这些都被证明表现不佳,以至于地图无法使用

我的怀疑是,您从SQLite数据库存储和检索图像数据的技术也不具备性能—存储二进制数据的blob不是SQL数据库的设计目的。
但是,在您的情况下,性能可能不是什么大问题,因此您的解决方案可能就足够了。

这取决于您如何使用图像以及性能对您的重要性

在我自己基于Cordova的应用程序中,我下载地图瓷砖图像供脱机使用,并使用HTML5画布显示它们。 因此,在我的例子中,性能对于确保贴图的缩放/平移平滑非常重要

在我的解决方案中,我使用将包含图像的zip下载到
cordova.file.cacheDirectory
(请参阅)。然后,我使用将其解压缩到
cordova.file.dataDirectory
。我的应用程序通过在Javascript中创建
new image()
对象并将
src
属性设置为
cordova.file.dataDirectory
中图像的本地路径来读取文件中的图像数据。然后,我使用将图像数据复制到画布。 此过程的性能非常高效,可以在Android和iOS设备上平滑地平移/缩放地图分幅

但是,由于iOS的WKWebView中缺少对
文件://
协议的支持,我被迫继续在iOS上的应用程序中使用UIWebView(我没有
cordova插件WKWebView引擎
)。 我尝试了一些WKWebView的变通方法,包括通过与WKWebView插件捆绑在一起的本地Web服务器读取图像(即
http://localhost:8080/path/to/myimage.png
),通过
cordova插件文件
读取图像作为数组缓冲区,并通过
cordova插件文件
读取图像作为base-64,但所有这些都被证明表现不佳,以至于地图无法使用

我的怀疑是,您从SQLite数据库存储和检索图像数据的技术也不具备性能—存储二进制数据的blob不是SQL数据库的设计目的。
但是,在您的情况下,性能可能不是什么大问题,因此您的解决方案可能就足够了。

谢谢。我正在存储maptiles以供脱机使用。该应用程序正在从WMTS下载maptiles,并通过支持cordova android和ios的cordova sqlite ext插件将其存储在slite db中。我修改了map客户端的“tileLoadFunction”,它在向WMT发送请求之前检查互动程序是否脱机可用。这非常有效,我可以向每个磁贴添加/存储一些附加属性,如时间戳,它为我提供了在特定时间后刷新磁贴所需的信息。到目前为止,地图(平移/缩放)的性能良好,并且刷新旧磁贴的可能性在我的情况下是必要的。对于我的maptiles的离线存储,我将使用sqlite插件,但是对于所有其他图像,我将尝试使用文件插件RRY来劫持这一点,但是您是否下载了一个新的sqlite db文件,或者只是一组图像,然后将其插入sqlite db谢谢。我正在存储maptiles以供脱机使用。该应用程序正在从WMTS下载maptiles,并通过支持cordova android和ios的cordova sqlite ext插件将其存储在slite db中。我修改了map客户端的“tileLoadFunction”,它在向WMT发送请求之前检查互动程序是否脱机可用。这非常有效,我可以向每个磁贴添加/存储一些附加属性,如时间戳,它为我提供了在特定时间后刷新磁贴所需的信息。到目前为止,地图(平移/缩放)的性能良好,并且刷新旧磁贴的可能性在我的情况下是必要的。对于maptiles的离线存储,我将使用sqlite插件,但对于所有其他图像,我将尝试使用文件插件RRY来劫持这一点,但是您是否下载了一个新的sqlite db文件或只是一组图像,然后将其插入sqlite db