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
}
相关推荐
阿奇__37 分钟前
uniapp支付宝 H5 开发踩坑,hash模式下取参要规范!
开发语言·uni-app
云起SAAS4 小时前
小智笔记APP源码 | 8大广告联盟聚合(穿山甲/优量汇/快手/百度) | 应用市场过审极速版 | uni-app全栈商用项目
笔记·uni-app·广告联盟·笔记app
蹦哒6 小时前
UniApp 原生插件开发完整指南
uni-app
a_Ichuan6 小时前
在HBuilderX创建的uniapp项目中使用unocss
前端·uni-app
web前端神器7 小时前
记录uniapp小程序的报错
小程序·uni-app·apache
yqcoder9 小时前
uni-app 之 网络请求
网络·uni-app
克里斯蒂亚诺更新9 小时前
uniapp适配H5和Android-apk实现获取当前位置经纬度并调用接口
android·前端·uni-app
2501_9160088921 小时前
深入解析iOS应用启动性能优化策略与实践
android·ios·性能优化·小程序·uni-app·cocoa·iphone
巴巴博一1 天前
uni-app 踩坑实录:实现“可拖拽全局悬浮按钮”时的 movable-view 坐标失效与 Flex 布局视错觉
vue.js·uni-app
阿奇__1 天前
h5微信授权code失效排查过程及解决记录
微信·uni-app