uniapp iosApp H5+本地文件操作(写入修改删除等)

h5+ 地址 html5plus

以csv文件为例,写入读取保存修改删除文件内容,传输文件等

1.save 文件保存

typescript 复制代码
function saveCsv(data,pathP,path){
	// #ifdef APP-PLUS
	return new Promise((resolve, reject) => {
		plus.io.requestFileSystem( plus.io.PUBLIC_DOCUMENTS, function( fs ) {
			// 通过fs.root获取DirectoryEntry对象进行操作
			 fs.root.getDirectory(pathP,{create:true},direEntry =>{
				plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, fs => {
					fs.root.getFile(path, {create: true}, fileEntry => {
						fileEntry.createWriter(writer => {
							writer.onwrite = e => {
								resolve(`file://${e.target.fileName}`);
								// uni.showModal({
								// 	title: '提示',
								// 	content: `导出成功,文件路径为${e.target.fileName.replace('/storage/emulated/0', '')}`,
								// 	cancelText: '了解并关闭',
								// 	confirmText: '预览文件',
								// 	success: result => {
								// 		if (result.confirm) {
								// 			uni.openDocument({
								// 				filePath: `file://${e.target.fileName}`,
								// 			})
								// 		}
								// 	}
								// });
							}
							writer.write(data);
						}, writerErr => {
							resolve(500)
							uni.showToast({
								title: '导出文件失败,请检查是否有权限',
								icon: 'none'
							});
						})
					})
				})
			})
		}, fsErr => {
			uni.showToast({
				title: '导出文件失败,请检查是否有权限',
				icon: 'none'
			});
		})
	})
	// #endif	
}

// #ifdef APP-PLUS
let submitCsv = savedata.map(e=> JSON.stringify(e)).join("\n");
saveCsv(submitCsv,`${user}/triallist/${_this.trialId}`,`${user}/triallist/${_this.trialId}/scoresubmit.csv`).then(path=>{
	console.log(path)
})
// #endif

2. read 读取

typescript 复制代码
function readListCsv(path){
	let reader = null;
	let data=[];
	// #ifdef APP-PLUS
	return new Promise((resolve, reject) => {
		plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS,fs => {
			fs.root.getFile(path,{create:true},fileEntry=> {
				fileEntry.file( function ( file ) {
					reader = new plus.io.FileReader();
					reader.onloadend = function ( e ) {
						if(e.target.result){
						  //返回的data处理取决于存入时的操作,不同格式不同操作
							data = e.target.result.split('\n').map(e=> JSON.parse(e))
							resolve(data);
						}else{
							data = []
							resolve(data);
						}
					};
					reader.readAsText( file );
				}, function ( e ) {
					uni.showToast({
						title: e.message,
						icon: 'none'
					});
				});
			})
		})
	})
	// #endif
}

// #ifdef APP-PLUS
//自定义文件路径
readListCsv(`${user}/triallist/${this.trialId}/time.csv`).then(res=>{
	console.log(res)
})

3. delete 删除目录

typescript 复制代码
//已存在目录,删除重建
let path = uni.getStorageSync('path') + `/${user}/triallist/${_this.trialId}`;
plus.io.resolveLocalFileSystemURL(path, function( entry ) {
	let directoryReader = entry.createReader(); //获取读取目录对象
	directoryReader.readEntries( function( entries ){
		console.log(entries.length);
		if (entries.length > 0) {
			 entry.removeRecursively(function(entry) {
				 callback();
				 //删除成功回调---获取不到。。。。    
			 }, function(e) {
				 //错误信息    
				 console.log(e.message + ' ?!')
			 })
		}
	})
})

4.upload 上传(uniapp)循环上传目录内文件

typescript 复制代码
// #ifdef APP-PLUS
//使用uniapp上传需要上传文件获取uniapp生成的路径后,调用上传接口
updateResume(){
	let path = uni.getStorageSync('path') + `/${user}/triallist/${this.trialId}/......`
	plus.io.resolveLocalFileSystemURL(path, function( entry ) {
		var directoryReader = entry.createReader(); //获取读取目录对象
		directoryReader.readEntries( function( entries ){
			for(let i=0; i < entries.length; i++ ){
				uni.saveFile({
					tempFilePath: path + entries[i].name,
					success: function (res) {
						uni.uploadFile({
							url:NEV.BASE_URL +'/api/api..../add',
							filePath:res.savedFilePath,
							header: {
								'X-Access-Token':uni.getStorageSync('token'),
								'Authorization': 'Bearer ' + uni.getStorageSync('token'),
								"Content-Type": "multipart/form-data",
							},
							name:'MultipartFile',
							formData: {  //接口携带的参数
								trialId:_this.trialId,
							},
							success() {
								console.log('一个文件上传成功');
							},
							fail() {
								console.log('一个文件上传失败');
							}
						})
					},
					fail() {
						console.log('一个文件上传失败');
					}
				});
				console.log( entries[i].name );
			}
		}, function ( e ) {
			alert( "Read entries failed: " + e.message );
		} );
	});
	// #endif
}
相关推荐
Mintopia17 小时前
Vue3 项目如何迁移到 uni-app x:从纯 Web 到多端应用的系统指南
uni-app
Mintopia18 小时前
uni-app x 发展前景技术分析:跨端统一的新阶段?
uni-app
不爱说话郭德纲2 天前
告别漫长的HbuilderX云打包排队!uni-app x 安卓本地打包保姆级教程(附白屏、包体积过大排坑指南)
android·前端·uni-app
HashTang3 天前
【AI 编程实战】第 12 篇:从 0 到 1 的回顾 - 项目总结与 AI 协作心得
前端·uni-app·ai编程
JunjunZ3 天前
uniapp 文件预览:从文件流到多格式预览的完整实现
前端·uni-app
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
TT_Close4 天前
“啪啪啪”三下键盘,极速拉起你的 uni-app 项目!
vue.js·uni-app·前端工程化
特立独行的猫a4 天前
uni-app x跨平台开发实战:开发鸿蒙HarmonyOS影视票房榜组件完整实现过程
华为·uni-app·harmonyos·轮播图·uniapp-x
00后整顿职场4 天前
Hbuilderx APP真机无法识别iqoo Z9+手机设备解决方案
uni-app·uniapp真机调试·真机运行
前端小雪的博客.4 天前
【保姆级教程】uniAI 插件高效开发 uni-app 微信小程序(附实战案例)
微信小程序·uni-app·ai编程·uniai