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