1# 保存用户文件 2 3在从网络下载文件到本地、或将已有用户文件另存为新的文件路径等场景下,需要使用FilePicker提供的保存用户文件的能力。 4 5对音频、图片、视频、文档类文件的保存操作类似,均通过调用对应picker的save()接口并传入对应的saveOptions来实现。 6 7 8## 保存图片或视频类文件 9 101. 导入选择器模块和文件管理模块。 11 12 ```ts 13 import picker from '@ohos.file.picker'; 14 import fs from '@ohos.file.fs'; 15 ``` 16 172. 创建图库保存选项实例。 18 19 ```ts 20 const photoSaveOptions = new picker.PhotoSaveOptions(); // 创建文件管理器保存选项实例 21 photoSaveOptions.newFileNames = ["PhotoViewPicker01.jpg"]; // 保存文件名(可选) 22 ``` 23 243. 创建图库选择器实例,调用[save()](../reference/apis/js-apis-file-picker.md#save)接口拉起FilePicker界面进行文件保存。用户选择目标文件夹,用户选择与文件类型相对应的文件夹,即可完成文件保存操作。保存成功后,返回保存文档的URI。 25 26 </br>save返回的URI权限是读写权限,可以根据结果集中URI进行文件读写等操作。注意不能在picker的回调里直接使用此URI进行打开文件操作,需要定义一个全局变量保存URI,使用类似一个按钮去触发打开文件。 27 28 ```ts 29 let URI = null; 30 const photoViewPicker = new picker.PhotoViewPicker(); 31 photoViewPicker.save(photoSaveOptions).then((photoSaveResult) => { 32 URI = photoSaveResult[0]; 33 console.info('photoViewPicker.save to file succeed and URI is:' + URI); 34 }).catch((err) => { 35 console.error(`Invoke photoViewPicker.save failed, code is ${err.code}, message is ${err.message}`); 36 }) 37 ``` 38 394. 待界面从FilePicker返回后,再通过类似一个按钮调用其他函数,使用[fs.openSync](../reference/apis/js-apis-file-fs.md#fsopensync)接口,通过URI打开这个文件得到fd。这里需要注意接口权限参数是fs.OpenMode.READ_WRITE。 40 41 ```ts 42 let file = fs.openSync(URI, fs.OpenMode.READ_WRITE); 43 console.info('file fd: ' + file.fd); 44 ``` 45 465. 通过fd使用[fs.writeSync](../reference/apis/js-apis-file-fs.md#writesync)接口对这个文件进行编辑修改,编辑修改完成后关闭fd。 47 48 ```ts 49 let writeLen = fs.writeSync(file.fd, 'hello, world'); 50 console.info('write data to file succeed and size is:' + writeLen); 51 fs.closeSync(file); 52 ``` 53 54## 保存文档类文件 55 561. 导入选择器模块和文件管理模块。 57 58 ```ts 59 import picker from '@ohos.file.picker'; 60 import fs from '@ohos.file.fs'; 61 ``` 62 632. 创建文档保存选项实例。 64 65 ```ts 66 const documentSaveOptions = new picker.DocumentSaveOptions(); // 创建文件管理器选项实例 67 documentSaveOptions.newFileNames = ["DocumentViewPicker01.txt"]; // 保存文件名(可选) 68 ``` 69 703. 创建文档选择器实例。调用[save()](../reference/apis/js-apis-file-picker.md#save-3)接口拉起FilePicker界面进行文件保存。用户选择目标文件夹,用户选择与文件类型相对应的文件夹,即可完成文件保存操作。保存成功后,返回保存文档的URI。 71 72 </br>save返回的URI权限是读写权限,可以根据结果集中URI进行文件读写等操作。注意不能在picker的回调里直接使用此URI进行打开文件操作,需要定义一个全局变量保存URI,使用类似一个按钮去触发打开文件。 73 74 ```ts 75 let URI = null; 76 const documentViewPicker = new picker.DocumentViewPicker(); // 创建文件选择器实例 77 documentViewPicker.save(documentSaveOptions).then((documentSaveResult) => { 78 URI = documentSaveResult[0]; 79 console.info('documentViewPicker.save to file succeed and URI is:' + URI); 80 }).catch((err) => { 81 console.error(`Invoke documentViewPicker.save failed, code is ${err.code}, message is ${err.message}`); 82 }) 83 ``` 84 854. 待界面从FilePicker返回后,再通过类似一个按钮调用其他函数,使用[fs.openSync](../reference/apis/js-apis-file-fs.md#fsopensync)接口,通过URI打开这个文件得到fd。这里需要注意接口权限参数是fs.OpenMode.READ_WRITE。 86 87 ```ts 88 let file = fs.openSync(URI, fs.OpenMode.READ_WRITE); 89 console.info('file fd: ' + file.fd); 90 ``` 91 925. 通过fd使用[fs.writeSync](../reference/apis/js-apis-file-fs.md#writesync)接口对这个文件进行编辑修改,编辑修改完成后关闭fd。 93 94 ```ts 95 let writeLen = fs.writeSync(file.fd, 'hello, world'); 96 console.info('write data to file succeed and size is:' + writeLen); 97 fs.closeSync(file); 98 ``` 99 100## 保存音频类文件 101 1021. 导入选择器模块和文件管理模块。 103 104 ```ts 105 import picker from '@ohos.file.picker'; 106 import fs from '@ohos.file.fs'; 107 ``` 108 1092. 创建音频保存选项实例。 110 111 ```ts 112 const audioSaveOptions = new picker.AudioSaveOptions(); // 创建文件管理器选项实例 113 audioSaveOptions.newFileNames = ['AudioViewPicker01.mp3']; // 保存文件名(可选) 114 ``` 115 1163. 创建音频选择器实例。调用[save()](../reference/apis/js-apis-file-picker.md#save-6)接口拉起FilePicker界面进行文件保存。用户选择目标文件夹,用户选择与文件类型相对应的文件夹,即可完成文件保存操作。保存成功后,返回保存文档的URI。 117 118 </br>save返回的URI权限是读写权限,可以根据结果集中URI进行文件读写等操作。注意不能在picker的回调里直接使用此URI进行打开文件操作,需要定义一个全局变量保存URI,使用类似一个按钮去触发打开文件。 119 120 ```ts 121 let URI = null; 122 const audioViewPicker = new picker.AudioViewPicker(); 123 audioViewPicker.save(audioSaveOptions).then((audioSelectResult) => { 124 URI = audioSelectResult[0]; 125 console.info('audioViewPicker.save to file succeed and URI is:' + URI); 126 }).catch((err) => { 127 console.error(`Invoke audioViewPicker.save failed, code is ${err.code}, message is ${err.message}`); 128 }) 129 ``` 130 1314. 待界面从FilePicker返回后,再通过类似一个按钮调用其他函数,使用[fs.openSync](../reference/apis/js-apis-file-fs.md#fsopensync)接口,通过URI打开这个文件得到fd。这里需要注意接口权限参数是fs.OpenMode.READ_WRITE。 132 133 ```ts 134 let file = fs.openSync(URI, fs.OpenMode.READ_WRITE); 135 console.info('file fd: ' + file.fd); 136 ``` 137 1385. 通过fd使用[fs.writeSync](../reference/apis/js-apis-file-fs.md#writesync)接口对这个文件进行编辑修改,编辑修改完成后关闭fd。 139 140 ```ts 141 let writeLen = fs.writeSync(file.fd, 'hello, world'); 142 console.info('write data to file succeed and size is:' + writeLen); 143 fs.closeSync(file); 144 ``` 145