uniapps使用HTML5的io模块拷贝文件目录

最近在集成sqlite到uniapp的过程中,因为要将sqlite数据库预加载,所以需要使用HTML5的plus.io模块。使用过程中遇到了许多问题,比如文件路径总是解析不到等。尤其是应用私有文档目录'_doc'。

根据官方文档:

复制代码
为了安全管理应用的资源目录,规范对文件系统的操作,5+ API在系统应用目录的基础设计了应用沙盒目录, 分为私有目录和公共目录两种类型,私有目录仅应用自身可以访问,公共目录在多应用环境时(如小程序SDK)所有应用都可访问。

应用私有资源目录,对应常量plus.io.PRIVATE_WWW,仅应用自身可读
应用私有文档目录,对应常量plus.io.PRIVATE_DOC,仅应用自身可读写
应用公共文档目录,对应常量plus.io.PUBLIC_DOCUMENTS,多应用时都可读写,常用于保存应用间共享文件
应用公共下载目录,对应常量plus.io.PUBLIC_DOWNLOADS,多应用时都可读写,常用于保存下载文件

plus.io.PRIVATE_WWW表示'_www'目录,实际值为1;plus.io.PRIVATE_DOC表示"__doc"目录,实际值为2;

因此不能把他们简单等同,要看方法需要的参数类型是什么。如果需要的参数类型是number,就使用常量,如果类型是string,则使用具体url路径。

别的不说了先,官方文档还是得仔细读读,虽然存在5%的小错误,但是还是可以提供帮助。

上代码!

我的需求是将数据库文件fit_path_app.db从_www拷贝到__doc目录下。该文件在项目中位于/static/database目录下,我是直接把整个目录拷贝到doc/db/目录下。

关于doc为什么直接使用字符串而不是本地文件路径,因为我发现如果在初始化时使用本地文件路径会解析地址失败,但是直接使用字符串则不会。原因不详。

最终使用下面的方法,目前在uniapp真机运行和使用mumu模拟器的情况下测试拷贝成功了,实体机测试晚点再看看,应该也问题不大。

javascript 复制代码
<script>
	export default {
		onLaunch: function() {
			const sourcePath = plus.io.convertLocalFileSystemURL('_www/static/database');
			// const targetRootPath = plus.io.convertLocalFileSystemURL('_doc/')
			const targetRootPath = '_doc/'
			// const targetFilePath = plus.io.convertLocalFileSystemURL('_doc/fit_path_app.db')
			const targetFilePath = 'db/'
			const paths = {
				source: sourcePath,
				targetRoot: targetRootPath,
				targetFile: targetFilePath
			}
			console.log('源和目标路径:',JSON.stringify(paths));
			
			plus.io.resolveLocalFileSystemURL(sourcePath,function(srcEntry) {
				plus.io.resolveLocalFileSystemURL(targetRootPath,function(targetEntry) {
					// 拷贝
					srcEntry.copyTo(targetEntry,targetFilePath,function(entry) {
						console.log('拷贝成功:',entry.fullPath);
					},function(e) {
						conso.error('拷贝失败:',JSON.stringify(e));
					})
				}, function(e){
					console.error('解析目标地址失败:',JSON.stringify(e))
				})
			}, function(e) {
				console.error('解析源地址失败:',JSON.stringify(e))
			})
			console.log('Database initialized successfully.');
			console.log('App Launch')
		},
		onShow: function() {
			console.log('App Show')
		},
		onHide: function() {
			console.log('App Hide')
		}
	}
</script>
相关推荐
java水泥工1 小时前
基于Echarts+HTML5可视化数据大屏展示-白茶大数据溯源平台V2
大数据·echarts·html5
破无差9 小时前
《赛事报名系统小程序》
小程序·html·uniapp
2501_9181269111 小时前
用html5写一个flappybird游戏
css·游戏·html5
王维志17 小时前
LiteDB详解
数据库·后端·mongodb·sqlite·c#·json·database
相与还1 天前
godot+c#操作sqlite并加解密
sqlite·c#·godot·sqlcipher
向上的车轮1 天前
如何用 Rust 重写 SQLite 数据库(二):是否有市场空间?
数据库·rust·sqlite
大可门耳3 天前
Qt的数据库模块介绍,Qt访问SQLite详细示例
数据库·qt·sqlite
DevilSeagull3 天前
JavaScript WebAPI 指南
java·开发语言·javascript·html·ecmascript·html5
Jayyih3 天前
嵌入式系统学习Day35(sqlite3数据库)
数据库·学习·sqlite
朱自清的诗.4 天前
使用python脚本储存mosquito服务器数据到sqlite
python·单片机·sqlite·esp32