东风地区网站建设价格,wordpress营销插件,wordpress登录机制,生物科技网站模板本文介绍如何保存Base64的文件到Download下 参考文档地址#xff1a;
保存用户文件-Harmony Next 用到的是DOWNLOAD模式保存文件
用户在使用save接口时#xff0c;可以将pickerMode配置为DOWNLOAD模式#xff0c;该模式下会拉起授权接口#xff0c;用户确认后会在公共路径…本文介绍如何保存Base64的文件到Download下 参考文档地址
保存用户文件-Harmony Next 用到的是DOWNLOAD模式保存文件
用户在使用save接口时可以将pickerMode配置为DOWNLOAD模式该模式下会拉起授权接口用户确认后会在公共路径download目录下创建用户当前hap包名的文件夹并通过save接口返回值回传相应的URI后续用户可以直接将文件保存在该URI下。
本文里面的Base64Utils和JSONutils都是来自于
pura/harmony-utils 1.0.2
参考代码如下 param {\dataBase64\:\data:audio/midi;base64,TVRoZAAAAAYAAQACAeBNVHJrAAAAIQD/UQMLcbAA/1kCAAAA/1gEBAIYCAD/AQR0dHR0AP8vAE1UcmsAAACrAMAAALB5AACwQAAAsFswALAKQACwB2QAkEdpgXCARwAAkEdVgXCARwAAkEdfgXCARwAAkEdVgXCARwAAkEBfgXCAQAAAkEVVgXCARQAAkD5fgXCAPgAAkENVgXCAQwAAkEdfgXCARwAAkEdVgXCARwAAkEdfgXCARwAAkEdVgXCARwAAkEBfgXCAQAAAkENVgXCAQwAAkEBfgXCQRVUDgEAAgXCARQAA/y8A\,\fileType\:\midi\,\fileName\:\tttt\}if (StringUtils.isStrNotBlank(param)) {const h5CallBackBean: H5CallBackBean | null JSONUtil.jsonToBeanH5CallBackBean(H5CallBackBean, param)if (h5CallBackBean) {if (midi h5CallBackBean.fileType) {const fileBase64 h5CallBackBean.dataBase64if (StringUtils.isStrNotBlank(fileBase64)) {const base64: string fileBase64.split(,)[1]const numTemp: number DateUtil.getTodayTime()let uri: string ;// 请确保 getContext(this) 返回结果为 UIAbilityContextlet context getContext(this) as common.Context;const documentViewPicker new picker.DocumentViewPicker(context);const documentSaveOptions new picker.DocumentSaveOptions();documentSaveOptions.pickerMode picker.DocumentPickerMode.DOWNLOAD;// documentSaveOptions.newFileNames [numTemp .midi]documentViewPicker.save(documentSaveOptions).then((documentSaveResult: Arraystring) {if (documentSaveResult.length0) {uri documentSaveResult[0];console.info(documentViewPicker.save succeed and uri is: uri);//得到uri后需要使用FileUri做一层转换才可以做后续读写的操作let path: string new fileUri.FileUri(uri).path//得到path后拼接文件名let filePath: string ${path}/${numTemp}.midi;if (StringUtils.isStrNotBlank(filePath)) {if (UiUtils.saveBase64File(base64,filePath)) {ToastUtil.showToast(保存成功)}}
}}).catch((err: BusinessError) {console.error(Invoke documentViewPicker.save failed, code is ${err.code}, message is ${err.message});})}}}/***保存base64文件** param context上下文* param base64base64文件内容* param filePath文件路径* returns是否保存成功*/public static saveBase64File(base64: string, filePath: string): boolean {if (!base64 || !filePath) {return false;}const imageBuffer Base64Util.decodeSync(base64);try {//这边要多加一个fs.OpenMode.CREATE得到创建文件的权限let file fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);console.info(file fd: file.fd);//因为writeSync的入参类型是ArrayBuffer或string所以这边要使用.buffer转换成ArrayBuffer类型否则会报错。fs.writeSync(file.fd, imageBuffer.buffer);fs.closeSync(file);} catch (err) {Logger.error(CommonConstants.TAG, saveBase64File err: ${err});return false;}return true;}
需要注意的是
1.得到uri后需要使用FileUri做一层转换才可以做后续读写的操作
2.因为writeSync的入参类型是ArrayBuffer或string所以这边要使用.buffer转换成ArrayBuffer类型否则会报错。
否则出现Error: Operation not permitted
防止以后出错特此记录