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