select-user-file.md 5.8 KB
Newer Older
Z
zengyawen 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 选择用户文件

终端用户有时需要分享、保存一些图片、视频等用户文件,开发者需要在应用中支持此类使用场景。此时,开发者可以使用OpenHarmony系统预置的[文件选择器(FilePicker)](../reference/apis/js-apis-file-picker.md),实现用户文件选择及保存能力。

根据用户文件的常见类型,文件选择器(FilePicker)分别提供以下接口:

- [PhotoViewPicker](../reference/apis/js-apis-file-picker.md#photoviewpicker):适用于图片或视频类文件的选择与保存。

- [DocumentViewPicker](../reference/apis/js-apis-file-picker.md#documentviewpicker):适用于文档类文件的选择与保存。

- [AudioViewPicker](../reference/apis/js-apis-file-picker.md#audioviewpicker):适用于音频类文件的选择与保存。

## 选择图片或视频类文件

1. 导入选择器模块。
Z
zengyawen 已提交
16

Z
zengyawen 已提交
17 18 19 20 21
   ```ts
   import picker from '@ohos.file.picker';
   ```

2. 创建图库选择选项实例。
Z
zengyawen 已提交
22

Z
zengyawen 已提交
23 24 25 26 27 28 29 30 31 32 33 34 35
   ```ts
   const photoSelectOptions = new picker.PhotoSelectOptions();
   ```

3. 选择媒体文件类型和选择媒体文件的最大数目。
   以下示例以图片选择为例,媒体文件类型请参见[PhotoViewMIMETypes](../reference/apis/js-apis-file-picker.md#photoviewmimetypes)

   ```ts
   photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; // 过滤选择媒体文件类型为IMAGE
   photoSelectOptions.maxSelectNumber = 5; // 选择媒体文件的最大数目
   ```

4. 创建图库选择器实例,调用[select()](../reference/apis/js-apis-file-picker.md#select)接口拉起FilePicker界面进行文件选择。
Z
zengyawen 已提交
36

Z
zengyawen 已提交
37 38 39 40 41 42 43
   文件选择成功后,返回[PhotoSelectResult](../reference/apis/js-apis-file-picker.md#photoselectresult)结果集,可以根据结果集中URI进行文件读取等操作。

   ```ts
   const photoPicker = new picker.PhotoViewPicker();
   photoPicker.select(photoSelectOptions)
     .then(async (photoSelectResult) => {
       let uri = photoSelectResult.photoUris[0];
44
       // 获取到图片或者视频文件的URI后进行文件读取等操作
Z
zengyawen 已提交
45 46 47 48 49 50 51 52 53
     })
     .catch((err) => {
       console.error(`Invoke documentPicker.select failed, code is ${err.code}, message is ${err.message}`);
     })
   ```

## 选择文档类文件

1. 导入选择器模块。
Z
zengyawen 已提交
54

Z
zengyawen 已提交
55 56 57 58 59
   ```ts
   import picker from '@ohos.file.picker';
   ```

2. 创建文档选择选项实例。
Z
zengyawen 已提交
60

Z
zengyawen 已提交
61 62 63 64 65
   ```ts
   const documentSelectOptions = new picker.DocumentSelectOptions(); 
   ```

3. 创建文档选择器实例。调用[select()](../reference/apis/js-apis-file-picker.md#select-3)接口拉起FilePicker界面进行文件选择。
66

Z
zengyawen 已提交
67
     文件选择成功后,返回被选中文档的URI结果集。开发者可以根据结果集中URI做进一步的处理。
68 69 70

   例如通过[文件管理接口](../reference/apis/js-apis-file-fs.md)根据URI获取部分文件属性信息,比如文件大小、访问时间、修改时间等。如有获取文件名称需求,请暂时使用[startAbilityForResult](../../application-dev/application-models/uiability-intra-device-interaction.md)获取。

Z
zengyawen 已提交
71 72 73
   > **说明:**
   >
   > 目前DocumentSelectOptions不支持参数配置,默认可以选择所有类型的用户文件。
Z
zengyawen 已提交
74

Z
zengyawen 已提交
75 76 77 78 79
   ```ts
   const documentViewPicker = new picker.DocumentViewPicker(); // 创建文件选择器实例
   documentViewPicker.select(documentSelectOptions)
     .then((documentSelectResult) => {
       let uri = documentSelectResult[0];
80
       // 获取到文档文件的URI后进行文件读取等操作
Z
zengyawen 已提交
81 82 83 84 85 86
     })
     .catch((err) => {
       console.error(`Invoke documentPicker.select failed, code is ${err.code}, message is ${err.message}`);
     })
   ```

87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
   > **说明:**
   >
   > 目前DocumentSelectOptions功能不完整, 如需获取文件名称,请使用startAbilityForResult接口。

   ```ts
   let config = {
     action: 'ohos.want.action.OPEN_FILE',
     parameters: {
       startMode: 'choose',
     }
   }
   try {
     let result = await context.startAbilityForResult(config, {windowMode: 1});
     if (result.resultCode !== 0) {
       console.error(`DocumentPicker.select failed, code is ${result.resultCode}, message is ${result.want.parameters.message}`);
       return;
     }
     // 获取到文档文件的URI
     let select_item_list = result.want.parameters.select_item_list;
     // 获取到文档文件的文件名称
     let file_name_list = result.want.parameters.file_name_list;
   } catch (err) {
     console.error(`Invoke documentPicker.select failed, code is ${err.code}, message is ${err.message}`);
   }
   ```

Z
zengyawen 已提交
113 114 115
## 选择音频类文件

1. 导入选择器模块。
Z
zengyawen 已提交
116

Z
zengyawen 已提交
117 118 119 120 121
   ```ts
   import picker from '@ohos.file.picker';
   ```

2. 创建音频选择选项实例。
Z
zengyawen 已提交
122

Z
zengyawen 已提交
123 124 125 126 127
   ```ts
   const audioSelectOptions = new picker.AudioSelectOptions();
   ```

3. 创建音频选择器实例。调用[select()](../reference/apis/js-apis-file-picker.md#select-6)接口拉起FilePicker界面进行文件选择。
Z
zengyawen 已提交
128
  
Z
zengyawen 已提交
129 130
   文件选择成功后,返回被选中音频的URI结果集。开发者可以根据结果集中URI做进一步的处理。

Z
zengyawen 已提交
131 132
   例如通过[文件管理接口](../reference/apis/js-apis-file-fs.md)根据URI拿到音频资源的文件句柄(FD),再配合媒体服务实现音频播放的开发,具体请参考[音频播放开发指导](../media/audio-playback-overview.md)

Z
zengyawen 已提交
133 134 135
   > **说明:**
   >
   > 目前AudioSelectOptions不支持参数配置,默认可以选择所有类型的用户文件。
Z
zengyawen 已提交
136

Z
zengyawen 已提交
137 138 139 140 141
   ```ts
   const audioViewPicker = new picker.AudioViewPicker();
   audioViewPicker.select(audioSelectOptions)
     .then(audioSelectResult => {
       let uri = audioSelectOptions[0];
142
       // 获取到音频文件的URI后进行文件读取等操作
Z
zengyawen 已提交
143 144 145 146 147
     })
     .catch((err) => {
       console.error(`Invoke audioPicker.select failed, code is ${err.code}, message is ${err.message}`);
     })
   ```