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>
相关推荐
SendTomo3 小时前
SendTomo稳定传输三大核心策略
javascript·网络协议·webrtc·html5·p2p
SendTomo4 小时前
send.wang(私传网)P2P直连加速文件传输
网络·网络协议·webrtc·html5·p2p
小白勇闯网安圈2 天前
Django Form 组件详解:从表单生成到 ModelForm 数据校验
数据库·django·sqlite
SendTomo3 天前
P2P文件传输工具对比:SendTomo vs send.wang
javascript·网络协议·webrtc·html5·p2p
SendTomo3 天前
WebRTC文件互传工具实测对比
javascript·网络·webrtc·html5·p2p
SendTomo3 天前
send.wang自托管+WSS保障信令安全方案
网络·网络协议·webrtc·html5·p2p
零域码客3 天前
从 SQLite 到 PostgreSQL:轻量单机到分布式架构选型、避坑与迁移全解析
分布式·postgresql·sqlite·wal·架构设计·后端开发·数据库选型
SendTomo4 天前
跨设备文件互传新方案
javascript·网络·webrtc·html5·p2p
我命由我123455 天前
CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度
前端·javascript·css·前端框架·html·html5·js
小白勇闯网安圈5 天前
Django 响应对象、文件上传与类视图
数据库·django·sqlite