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


    h5+ 地址 html5plus

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

    1.save 文件保存

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    2. read 读取

    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)
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    3. delete 删除目录

    //已存在目录,删除重建
    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 + ' ?!')
    			 })
    		}
    	})
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

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

    // #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
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
  • 相关阅读:
    半夜被慢查询告警吵醒,limit深度分页的坑
    挑战杯 基于机器学习与大数据的糖尿病预测
    MTK cts测试注意事项
    Kafka 安装与配置
    01 pyechars 特性、版本、安装介绍
    设计模式之一单一职责原则(东方化)
    YOLO训练KITTI数据集(二):KITTI数据集的标签转换成YOLOv5所需要的标签格式并进行分割
    E.密码(算法选修)
    Golang net/http 包中的 RoundTripper 接口详解
    lv5 嵌入式开发-7 有名管道和无名管道
  • 原文地址:https://blog.csdn.net/qq_36685539/article/details/133268278