• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_WRITE40
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_WRITE86
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_WRITE132
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