1. 程式人生 > 實用技巧 >uniapp寫入位元組流檔案bytes

uniapp寫入位元組流檔案bytes

1.

//檔案的寫入操作傳入要寫入檔名,base64
function lzFileWriter(base64,fileName) {
	return new Promise((result,reject)=>{
		// PRIVATE_WWW:本地檔案系統常量,Number型別,固定值1。應用執行資源目錄,僅本應用可訪問。 為了確保應用資源的安全性,此目錄只可讀。
		// PRIVATE_DOC 本地檔案系統常量,Number型別,固定值2。應用私有文件目錄,僅本應用可讀寫。
		plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
			/*
			fs.root是根目錄操作物件DirectoryEntry
			getFile(path,flag,succesCB,errorCB)建立或開啟檔案
				path: ( DOMString ) 必選 要操作檔案相對於當前目錄的地址
				flag: ( Flags ) 可選 要操作檔案或目錄的引數 create: (Boolean 型別 )是否建立物件標記 指示如果檔案或目錄不存在時是否進行建立,預設值為false
				succesCB: ( EntrySuccessCallback ) 可選 建立或開啟檔案成功的回撥函式
				errorCB: ( FileErrorCallback ) 可選 建立或開啟檔案失敗的回撥函式
			*/ 
		   // 建立或開啟檔案
			fs.root.getFile(fileName,{create:true},function(fileEntry) {
				// 獲得平臺絕對路徑    
				var fullPath = fileEntry.fullPath;  
				console.log('平臺絕對路徑',fullPath);
				// 引入安卓原生類
				var Base64 = plus.android.importClass("android.util.Base64");
				var FileOutputStream = plus.android.importClass("java.io.FileOutputStream");
				//如果檔案不存在則建立檔案,如果檔案存在則刪除檔案後重新建立檔案
				var out = new FileOutputStream(fullPath); 
				/**
				 * 此處需要把base64字首去除,在寫入位元組流陣列
				 * 去除頭部data:image/jpg;base64,留下base64編碼後的字串
				**/
				let index=base64.indexOf(',')
				let base64Str=base64.slice(index+1,base64.length)
				console.log(base64Str.slice(0,55));
				//base64解密得到位元組流bytes;	
				var bytes = Base64.decode(base64Str,0);
				try{  
					console.log(bytes);
					out.write(bytes); // byte 陣列寫入此檔案輸出流中。
					out.flush(); //重新整理寫入檔案中去。
					out.close(); //關閉此檔案輸出流並釋放與此流有關的所有系統資源。
					result(fullPath)
				}catch(e){  
					console.log(e.message);  
					reject(e.message)
				}
				// 下面的方法只能寫入字串,無法寫入位元組流bytes
				// fileEntry檔案系統中的檔案物件,用於管理特定的本地檔案
				// fileEntry.file(function(file) {
				// 	/*createWriter獲取檔案關聯的寫檔案操作物件FileWriter
				// 		abort: 終止檔案寫入操作
				// 		seek: 定位檔案操作位置
				// 		truncate: 按照指定長度截斷檔案
				// 		write: 向檔案中寫入資料
				// 	*/
				// 	fileEntry.createWriter(function(FileWriter) {
				// 		FileWriter.write(base64);
				// 		FileWriter.onwriteend=function(res){
				// 			console.log(res.target.fileName);
				// 			result(res.target.fileName)
				// 		}
				// 		FileWriter.onerror=function(error){
				// 			console.log(error);
				// 			reject(error)
				// 		}
				// 	}, function(e) {
				// 		console.log(e);
				// 	});
				// });
			});
		});
	})
}