• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 选择用户文件
2
3终端用户有时需要分享、保存一些图片、视频等用户文件,开发者需要在应用中支持此类使用场景。此时,开发者可以使用OpenHarmony系统预置的[文件选择器(FilePicker)](../reference/apis/js-apis-file-picker.md),实现用户文件选择及保存能力。
4
5根据用户文件的常见类型,文件选择器(FilePicker)分别提供以下接口:
6
7- [PhotoViewPicker](../reference/apis/js-apis-file-picker.md#photoviewpicker):适用于图片或视频类文件的选择与保存。
8
9- [DocumentViewPicker](../reference/apis/js-apis-file-picker.md#documentviewpicker):适用于文档类文件的选择与保存。
10
11- [AudioViewPicker](../reference/apis/js-apis-file-picker.md#audioviewpicker):适用于音频类文件的选择与保存。
12
13## 选择图片或视频类文件
14
151. 导入选择器模块。
16
17   ```ts
18   import picker from '@ohos.file.picker';
19   ```
20
212. 创建图库选择选项实例。
22
23   ```ts
24   const photoSelectOptions = new picker.PhotoSelectOptions();
25   ```
26
273. 选择媒体文件类型和选择媒体文件的最大数目。
28   以下示例以图片选择为例,媒体文件类型请参见[PhotoViewMIMETypes](../reference/apis/js-apis-file-picker.md#photoviewmimetypes)。
29
30   ```ts
31   photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为IMAGE
32   photoSelectOptions.maxSelectNumber = 5; // 选择媒体文件的最大数目
33   ```
34
354. 创建图库选择器实例,调用[select()](../reference/apis/js-apis-file-picker.md#select)接口拉起FilePicker界面进行文件选择。
36
37   文件选择成功后,返回[PhotoSelectResult](../reference/apis/js-apis-file-picker.md#photoselectresult)结果集,可以根据结果集中URI进行文件读取等操作。
38
39   ```ts
40   const photoPicker = new picker.PhotoViewPicker();
41   photoPicker.select(photoSelectOptions)
42     .then(async (photoSelectResult) => {
43       let uri = photoSelectResult.photoUris[0];
44       // 获取到图片或者视频文件的URI后进行文件读取等操作
45     })
46     .catch((err) => {
47       console.error(`Invoke documentPicker.select failed, code is ${err.code}, message is ${err.message}`);
48     })
49   ```
50
51## 选择文档类文件
52
531. 导入选择器模块。
54
55   ```ts
56   import picker from '@ohos.file.picker';
57   ```
58
592. 创建文档选择选项实例。
60
61   ```ts
62   const documentSelectOptions = new picker.DocumentSelectOptions();
63   ```
64
653. 创建文档选择器实例。调用[select()](../reference/apis/js-apis-file-picker.md#select-3)接口拉起FilePicker界面进行文件选择。
66
67   文件选择成功后,返回被选中文档的URI结果集。开发者可以根据结果集中URI做进一步的处理。
68
69   例如通过[文件管理接口](../reference/apis/js-apis-file-fs.md)根据URI获取部分文件属性信息,比如文件大小、访问时间、修改时间等。如有获取文件名称需求,请暂时使用[startAbilityForResult](../../application-dev/application-models/uiability-intra-device-interaction.md)获取。
70
71   > **说明:**
72   >
73   > 目前DocumentSelectOptions不支持参数配置,默认可以选择所有类型的用户文件。
74
75   ```ts
76   const documentViewPicker = new picker.DocumentViewPicker(); // 创建文件选择器实例
77   documentViewPicker.select(documentSelectOptions)
78     .then((documentSelectResult) => {
79       let uri = documentSelectResult[0];
80       // 获取到文档文件的URI后进行文件读取等操作
81     })
82     .catch((err) => {
83       console.error(`Invoke documentPicker.select failed, code is ${err.code}, message is ${err.message}`);
84     })
85   ```
86
87   > **说明:**
88   >
89   > 目前DocumentSelectOptions功能不完整, 如需获取文件名称,请使用startAbilityForResult接口。
90
91   ```ts
92   let config = {
93     action: 'ohos.want.action.OPEN_FILE',
94     parameters: {
95       startMode: 'choose',
96     }
97   }
98   try {
99     let result = await context.startAbilityForResult(config, {windowMode: 1});
100     if (result.resultCode !== 0) {
101       console.error(`DocumentPicker.select failed, code is ${result.resultCode}, message is ${result.want.parameters.message}`);
102       return;
103     }
104     // 获取到文档文件的URI
105     let select_item_list = result.want.parameters.select_item_list;
106     // 获取到文档文件的文件名称
107     let file_name_list = result.want.parameters.file_name_list;
108   } catch (err) {
109     console.error(`Invoke documentPicker.select failed, code is ${err.code}, message is ${err.message}`);
110   }
111   ```
112
113## 选择音频类文件
114
1151. 导入选择器模块。
116
117   ```ts
118   import picker from '@ohos.file.picker';
119   ```
120
1212. 创建音频选择选项实例。
122
123   ```ts
124   const audioSelectOptions = new picker.AudioSelectOptions();
125   ```
126
1273. 创建音频选择器实例。调用[select()](../reference/apis/js-apis-file-picker.md#select-6)接口拉起FilePicker界面进行文件选择。
128
129   文件选择成功后,返回被选中音频的URI结果集。开发者可以根据结果集中URI做进一步的处理。
130
131   例如通过[文件管理接口](../reference/apis/js-apis-file-fs.md)根据URI拿到音频资源的文件句柄(FD),再配合媒体服务实现音频播放的开发,具体请参考[音频播放开发指导](../media/audio-playback-overview.md)。
132
133   > **说明:**
134   >
135   > 目前AudioSelectOptions不支持参数配置,默认可以选择所有类型的用户文件。
136
137   ```ts
138   const audioViewPicker = new picker.AudioViewPicker();
139   audioViewPicker.select(audioSelectOptions)
140     .then(audioSelectResult => {
141       let uri = audioSelectOptions[0];
142       // 获取到音频文件的URI后进行文件读取等操作
143     })
144     .catch((err) => {
145       console.error(`Invoke audioPicker.select failed, code is ${err.code}, message is ${err.message}`);
146     })
147   ```
148