• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.fileshare (文件分享)
2<!--Kit: Core File Kit-->
3<!--Subsystem: FileManagement-->
4<!--Owner: @lvzhenjie; @hongjin-li_admin-->
5<!--Designer: @chenxi0605; @JerryH1011-->
6<!--Tester: @leiyuqian-->
7<!--Adviser: @foryourself-->
8
9该模块提供文件分享能力,提供系统应用将公共目录文件统一资源标志符(Uniform Resource Identifier,URI)以读写权限授权给其他应用的接口,授权后应用可通过[@ohos.file.fs](js-apis-file-fs.md)的相关接口进行相关open、read、write等操作,实现文件分享。
10
11> **说明:**
12>
13> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
14
15## 导入模块
16
17```ts
18import fileShare from '@ohos.fileshare';
19```
20
21## OperationMode<sup>11+</sup>
22
23枚举,授予或使能权限的URI访问模式。
24
25**系统能力:** SystemCapability.FileManagement.AppFileService.FolderAuthorization
26
27| 名称  | 值   | 说明  |
28| ----- |-----|-----|
29| READ_MODE  | 0b1 | 读权限。 |
30| WRITE_MODE  | 0b10 | 写权限。 |
31| CREATE_MODE<sup>20+</sup>  | 0b100 | 创建文件/文件夹权限。 |
32| DELETE_MODE<sup>20+</sup>  | 0b1000 | 删除文件/文件夹权限。 |
33| RENAME_MODE<sup>20+</sup>  | 0b10000 | 重命名文件/文件夹权限。 |
34
35## PolicyErrorCode<sup>11+</sup>
36
37枚举,授予或使能权限策略失败的URI对应的错误码。
38
39**系统能力:** SystemCapability.FileManagement.AppFileService.FolderAuthorization
40
41| 名称  | 值   | 说明        |
42| ----- |-----|-----------|
43| PERSISTENCE_FORBIDDEN  | 1   | URI禁止被持久化。 |
44| INVALID_MODE  | 2   | 无效的模式。     |
45| INVALID_PATH  | 3   | 无效的路径。     |
46| PERMISSION_NOT_PERSISTED<sup>12+</sup>  | 4   | 权限没有被持久化。 |
47
48## PolicyErrorResult<sup>11+</sup>
49
50授予或使能权限失败的URI策略结果。支持persistPermission、revokePermission、activatePermission、deactivatePermission接口抛出错误时使用。
51
52type PolicyErrorResult = { uri: string; code: PolicyErrorCode; message: string; }
53
54**系统能力:** SystemCapability.FileManagement.AppFileService.FolderAuthorization
55
56| 名称| 类型| 必填 | 说明|
57|--------|--------|--------|---------|
58| uri     | string| 是  | 授予或使能权限失败的URI。|
59| code    | [PolicyErrorCode](#policyerrorcode11) | 是  | 授权策略失败的URI对应的错误码。 |
60| message | string| 是   | 授权策略失败的URI对应的原因。  |
61
62## PolicyInfo<sup>11+</sup>
63
64需要授予或使能权限URI的策略信息。
65
66**系统能力:** SystemCapability.FileManagement.AppFileService.FolderAuthorization
67
68| 名称  | 类型  | 只读 | 可选 | 说明                                                   |
69|------|-------|------|-----|------------------------------------------------------|
70| uri| string | 否   | 否 | 需要授予或使能权限的URI。                                       |
71| operationMode | number | 否   | 否 | 授予或使能权限的URI访问模式,参考[OperationMode](#operationmode11)。 |
72
73## PathPolicyInfo<sup>15+</sup>
74
75需要查询的文件或目录的信息。
76
77**系统能力:** SystemCapability.FileManagement.AppFileService.FolderAuthorization
78
79| 名称 | 类型  | 只读 | 可选 | 说明  |
80|------|-------|-----|-----|--------|
81| path          | string        | 否 | 否   | 需要查询的path。|
82| operationMode | OperationMode | 否 | 否   | 需要查询的path的访问模式,参考[OperationMode](#operationmode11)。 |
83
84## PolicyType<sup>15+</sup>
85
86枚举,所查询策略信息对应的授权模式。
87
88**系统能力:** SystemCapability.FileManagement.AppFileService.FolderAuthorization
89
90| 名称  | 值   | 说明        |
91| ----- |-----|-----------|
92| TEMPORARY_TYPE  | 0   | 临时授权。 |
93| PERSISTENT_TYPE  | 1   | 持久化授权。     |
94
95## fileShare.persistPermission<sup>11+</sup>
96
97persistPermission(policies: Array&lt;PolicyInfo>): Promise&lt;void&gt;
98
99异步方法对所选择的多个文件或目录URI持久化授权,以promise形式返回结果。该接口仅对具有该系统能力的设备开放(此接口不支持媒体类URI及远端URI的持久化)。
100
101**需要权限:** ohos.permission.FILE_ACCESS_PERSIST
102
103**系统能力:** SystemCapability.FileManagement.AppFileService.FolderAuthorization
104
105**参数:**
106
107| 参数名 | 类型  | 必填 | 说明  |
108| -------- |---------| -------- |--------|
109| policies| Array&lt;[PolicyInfo](#policyinfo11)> | 是 | 需要授权URI的策略信息,policies数组大小上限为500。|
110
111**返回值:**
112
113| 类型 | 说明 |
114| -------- | -------- |
115| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
116
117**错误码:**
118
119以下错误码的详细介绍请参见[文件管理子系统错误码](errorcode-filemanagement.md)和[通用错误码](../errorcode-universal.md)。
120如果存在URI授权失败,则抛出13900001错误码,且失败URI信息将抛出异常data属性中以Array<[PolicyErrorResult](#policyerrorresult11)>形式提供错误信息。
121
122| 错误码ID    | 错误信息       |
123|----------| --------- |
124| 201      | Permission verification failed, usually the result returned by VerifyAccessToken.|
125| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
126| 801      | Capability not supported. |
127| 13900001 | Operation not permitted.|
128| 13900042 | Unknown error.|
129
130**示例:**
131
132  ```ts
133  import { BusinessError } from '@kit.BasicServicesKit';
134  import { picker } from '@kit.CoreFileKit';
135
136  async function persistPermissionExample() {
137    try {
138      let DocumentSelectOptions = new picker.DocumentSelectOptions();
139      let documentPicker = new picker.DocumentViewPicker();
140      let uris = await documentPicker.select(DocumentSelectOptions);
141      let policyInfo: fileShare.PolicyInfo = {
142        uri: uris[0],
143        operationMode: fileShare.OperationMode.READ_MODE,
144      };
145      let policies: Array<fileShare.PolicyInfo> = [policyInfo];
146      fileShare.persistPermission(policies).then(() => {
147        console.info("persistPermission successfully");
148      }).catch((err: BusinessError<Array<fileShare.PolicyErrorResult>>) => {
149        console.error("persistPermission failed with error message: " + err.message + ", error code: " + err.code);
150        if (err.code == 13900001 && err.data) {
151          for (let i = 0; i < err.data.length; i++) {
152            console.error("error code : " + JSON.stringify(err.data[i].code));
153            console.error("error uri : " + JSON.stringify(err.data[i].uri));
154            console.error("error reason : " + JSON.stringify(err.data[i].message));
155          }
156        }
157      });
158    } catch (error) {
159      let err: BusinessError = error as BusinessError;
160      console.error('persistPermission failed with err: ' + JSON.stringify(err));
161    }
162  }
163  ```
164
165## fileShare.revokePermission<sup>11+</sup>
166
167revokePermission(policies: Array&lt;PolicyInfo&gt;): Promise&lt;void&gt;
168
169异步方法对所选择的多个文件或目录uri取消持久化授权,以promise形式返回结果。该接口仅对具有该系统能力的设备开放(此接口不支持媒体类URI及远端URI的持久化)。
170
171**需要权限:** ohos.permission.FILE_ACCESS_PERSIST
172
173**系统能力:** SystemCapability.FileManagement.AppFileService.FolderAuthorization
174
175**参数:**
176
177| 参数名 | 类型  | 必填 | 说明  |
178| -------- |----------| -------- |----------|
179| policies| Array&lt;[PolicyInfo](#policyinfo11)> | 是 | 需要授权URI的策略信息,policies数组大小上限为500。|
180
181**返回值:**
182
183| 类型 | 说明 |
184| -------- | -------- |
185| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
186
187**错误码:**
188
189以下错误码的详细介绍请参见[文件管理子系统错误码](errorcode-filemanagement.md)和[通用错误码](../errorcode-universal.md)。
190如果存在URI取消授权失败,则抛出13900001错误码,且失败URI信息将抛出异常data属性中以Array<[PolicyErrorResult](#policyerrorresult11)>形式提供错误信息。
191
192| 错误码ID | 错误信息 |
193|----------| --------- |
194| 201      | Permission verification failed, usually the result returned by VerifyAccessToken.|
195| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
196| 801      | Capability not supported. |
197| 13900001 | Operation not permitted.|
198| 13900042 | Unknown error.|
199
200**示例:**
201
202  ```ts
203  import { BusinessError } from '@kit.BasicServicesKit';
204  import { picker } from '@kit.CoreFileKit';
205
206  async function revokePermissionExample() {
207    try {
208      let DocumentSelectOptions = new picker.DocumentSelectOptions();
209      let documentPicker = new picker.DocumentViewPicker();
210      let uris = await documentPicker.select(DocumentSelectOptions);
211      let policyInfo: fileShare.PolicyInfo = {
212        uri: uris[0],
213        operationMode: fileShare.OperationMode.READ_MODE,
214      };
215      let policies: Array<fileShare.PolicyInfo> = [policyInfo];
216      fileShare.revokePermission(policies).then(() => {
217        console.info("revokePermission successfully");
218      }).catch((err: BusinessError<Array<fileShare.PolicyErrorResult>>) => {
219        console.error("revokePermission failed with error message: " + err.message + ", error code: " + err.code);
220          if (err.code == 13900001 && err.data) {
221            for (let i = 0; i < err.data.length; i++) {
222              console.error("error code : " + JSON.stringify(err.data[i].code));
223              console.error("error uri : " + JSON.stringify(err.data[i].uri));
224              console.error("error reason : " + JSON.stringify(err.data[i].message));
225            }
226          }
227      });
228    } catch (error) {
229      let err: BusinessError = error as BusinessError;
230      console.error('revokePermission failed with err: ' + JSON.stringify(err));
231    }
232  }
233  ```
234
235## fileShare.activatePermission<sup>11+</sup>
236
237activatePermission(policies: Array&lt;PolicyInfo>): Promise&lt;void&gt;
238
239异步方法使能多个已经永久授权过的文件或目录,以promise形式返回结果。该接口仅对具有该系统能力的设备开放(此接口不支持媒体类URI及远端URI的持久化)。
240
241**需要权限:** ohos.permission.FILE_ACCESS_PERSIST
242
243**系统能力:** SystemCapability.FileManagement.AppFileService.FolderAuthorization
244
245**参数:**
246
247| 参数名 | 类型 | 必填 | 说明 |
248| -------- | -------- | -------- |---------|
249| policies| Array&lt;[PolicyInfo](#policyinfo11)> | 是 | 需要授权URI的策略信息,policies数组大小上限为500。|
250
251**返回值:**
252
253| 类型 | 说明 |
254| -------- | -------- |
255| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
256
257**错误码:**
258
259以下错误码的详细介绍请参见[文件管理子系统错误码](errorcode-filemanagement.md)和[通用错误码](../errorcode-universal.md)。
260如果存在URI使能权限失败,则抛出13900001错误码,且失败URI信息将抛出异常data属性中以Array<[PolicyErrorResult](#policyerrorresult11)>形式提供错误信息。
261
262| 错误码ID    | 错误信息       |
263|----------| --------- |
264| 201      | Permission verification failed, usually the result returned by VerifyAccessToken.|
265| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
266| 801      | Capability not supported. |
267| 13900001 | Operation not permitted.|
268| 13900042 | Unknown error.|
269
270**示例:**
271
272  ```ts
273  import { BusinessError } from '@kit.BasicServicesKit';
274  import { picker } from '@kit.CoreFileKit';
275
276  async function activatePermissionExample() {
277    try {
278      let uri = "file://docs/storage/Users/username/tmp.txt";
279      let policyInfo: fileShare.PolicyInfo = {
280        uri: uri,
281        operationMode: fileShare.OperationMode.READ_MODE,
282      };
283      let policies: Array<fileShare.PolicyInfo> = [policyInfo];
284      fileShare.activatePermission(policies).then(() => {
285        console.info("activatePermission successfully");
286      }).catch(async (err: BusinessError<Array<fileShare.PolicyErrorResult>>) => {
287        console.error("activatePermission failed with error message: " + err.message + ", error code: " + err.code);
288          if (err.code == 13900001 && err.data) {
289            for (let i = 0; i < err.data.length; i++) {
290              console.error("error code : " + JSON.stringify(err.data[i].code));
291              console.error("error uri : " + JSON.stringify(err.data[i].uri));
292              console.error("error reason : " + JSON.stringify(err.data[i].message));
293              if(err.data[i].code == fileShare.PolicyErrorCode.PERMISSION_NOT_PERSISTED){
294                await fileShare.persistPermission(policies);
295              }
296            }
297          }
298      });
299    } catch (error) {
300      let err: BusinessError = error as BusinessError;
301      console.error('activatePermission failed with err: ' + JSON.stringify(err));
302    }
303  }
304  ```
305
306## fileShare.deactivatePermission<sup>11+</sup>
307
308deactivatePermission(policies: Array&lt;PolicyInfo>): Promise&lt;void&gt;
309
310异步方法取消使能授权过的多个文件或目录,以promise形式返回结果。该接口仅对具有该系统能力的设备开放(此接口不支持媒体类URI及远端URI的持久化)。
311
312**需要权限:** ohos.permission.FILE_ACCESS_PERSIST
313
314**系统能力:** SystemCapability.FileManagement.AppFileService.FolderAuthorization
315
316**参数:**
317
318| 参数名 | 类型 | 必填 | 说明  |
319| -------- | -------- | -------- |---------|
320| policies| Array&lt;[PolicyInfo](#policyinfo11)> | 是 | 需要授权URI的策略信息,policies数组大小上限为500。|
321
322**返回值:**
323
324| 类型 | 说明 |
325| -------- | -------- |
326| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
327
328**错误码:**
329
330以下错误码的详细介绍请参见[文件管理子系统错误码](errorcode-filemanagement.md)和[通用错误码](../errorcode-universal.md)。
331如果存在URI取消使能权限失败,则抛出13900001错误码,且失败URI信息将抛出异常data属性中以Array<[PolicyErrorResult](#policyerrorresult11)>形式提供错误信息。
332
333| 错误码ID    | 错误信息       |
334|----------| --------- |
335| 201      | Permission verification failed, usually the result returned by VerifyAccessToken.|
336| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
337| 801      | Capability not supported. |
338| 13900001 | Operation not permitted.|
339| 13900042 | Unknown error.|
340
341**示例:**
342
343  ```ts
344  import { BusinessError } from '@kit.BasicServicesKit';
345  import { picker } from '@kit.CoreFileKit';
346
347  async function deactivatePermissionExample() {
348    try {
349      let uri = "file://docs/storage/Users/username/tmp.txt";
350      let policyInfo: fileShare.PolicyInfo = {
351        uri: uri,
352        operationMode: fileShare.OperationMode.READ_MODE,
353      };
354      let policies: Array<fileShare.PolicyInfo> = [policyInfo];
355      fileShare.deactivatePermission(policies).then(() => {
356        console.info("deactivatePermission successfully");
357      }).catch((err: BusinessError<Array<fileShare.PolicyErrorResult>>) => {
358        console.error("deactivatePermission failed with error message: " + err.message + ", error code: " + err.code);
359          if (err.code == 13900001 && err.data) {
360            for (let i = 0; i < err.data.length; i++) {
361              console.error("error code : " + JSON.stringify(err.data[i].code));
362              console.error("error uri : " + JSON.stringify(err.data[i].uri));
363              console.error("error reason : " + JSON.stringify(err.data[i].message));
364            }
365          }
366      });
367    } catch (error) {
368      let err: BusinessError = error as BusinessError;
369      console.error('deactivatePermission failed with err: ' + JSON.stringify(err));
370    }
371  }
372  ```
373
374## fileShare.checkPersistentPermission<sup>12+</sup>
375
376checkPersistentPermission(policies: Array&lt;PolicyInfo>): Promise&lt;Array&lt;boolean&gt;&gt;
377
378异步方法校验所选择的多个文件或目录URI持久化授权,以promise形式返回结果。
379
380**系统能力:** SystemCapability.FileManagement.AppFileService.FolderAuthorization
381
382**参数:**
383
384| 参数名 | 类型                                    | 必填 | 说明                      |
385| -------- |---------------------------------------| -------- |-------------------------|
386| policies| Array&lt;[PolicyInfo](#policyinfo11)&gt; | 是 | 需要授权URI的策略信息,policies数组大小上限为500。|
387
388**返回值:**
389
390|   类型   |  说明   |
391| ------- | ------- |
392| Promise&lt;Array&lt;boolean&gt;&gt; | Promise对象。返回true表示有持久化授权;false表示不具有持久化授权。 |
393
394**错误码:**
395
396以下错误码的详细介绍请参见[文件管理子系统错误码](errorcode-filemanagement.md)和[通用错误码](../errorcode-universal.md)。
397
398| 错误码ID    | 错误信息       |
399|----------| --------- |
400| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
401| 801      | Capability not supported. |
402| 13900042 | Unknown error.|
403
404**示例:**
405
406  ```ts
407  import { BusinessError } from '@kit.BasicServicesKit';
408  import { picker } from '@kit.CoreFileKit';
409
410  async function checkPersistentPermissionExample() {
411    try {
412      let documentSelectOptions = new picker.DocumentSelectOptions();
413      let documentPicker = new picker.DocumentViewPicker();
414      let uris = await documentPicker.select(documentSelectOptions);
415      let policyInfo: fileShare.PolicyInfo = {
416        uri: uris[0],
417        operationMode: fileShare.OperationMode.READ_MODE,
418      };
419      let policies: Array<fileShare.PolicyInfo> = [policyInfo];
420      fileShare.checkPersistentPermission(policies).then(async (data) => {
421        let result: Array<boolean> = data;
422        for (let i = 0; i < result.length; i++) {
423          console.log("checkPersistentPermission result: " + JSON.stringify(result[i]));
424          if(!result[i]){
425            let info: fileShare.PolicyInfo = {
426              uri: policies[i].uri,
427              operationMode: policies[i].operationMode,
428            };
429            let policy : Array<fileShare.PolicyInfo> = [info];
430            await fileShare.persistPermission(policy);
431          }
432        }
433      }).catch((err: BusinessError<Array<fileShare.PolicyErrorResult>>) => {
434        console.error("checkPersistentPermission failed with error message: " + err.message + ", error code: " + err.code);
435      });
436    } catch (error) {
437      let err: BusinessError = error as BusinessError;
438      console.error('checkPersistentPermission failed with err: ' + JSON.stringify(err));
439    }
440  }
441  ```
442