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> - 当前页面仅包含本模块的系统接口,其他公开接口参见[@ohos.fileshare (文件分享)](js-apis-fileShare-sys.md)。
9
10## 导入模块
11
12```ts
13import  { fileShare } from '@kit.CoreFileKit';
14```
15
16## fileShare.grantUriPermission
17
18grantUriPermission(uri: string, bundleName: string, flag: wantConstant.Flags, callback: AsyncCallback<void>): void
19
20对公共目录文件URI进行授权操作,使用callback异步回调。
21
22**需要权限**:ohos.permission.WRITE_MEDIA
23
24**系统接口**:此接口为系统接口
25
26**系统能力**:SystemCapability.FileManagement.AppFileService
27
28**参数:**
29
30| 参数名 | 类型   | 必填 | 说明                       |
31| ------ | ------ | ---- | -------------------------- |
32| uri   | string | 是   | 公共目录文件URI |
33| bundleName   | string | 是   | 分享目标的包名 |
34| flag   | [wantConstant.Flags](../apis-ability-kit/js-apis-app-ability-wantConstant.md#wantconstantflags) | 是   | 授权的权限。<br/>wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION:读授权<br/>wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION:写授权|
35 | callback | AsyncCallback&lt;void&gt;  | 是    | 异步授权之后的回调                             |
36
37**错误码:**
38
39以下错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)
40
41| 错误码ID                     | 错误信息        |
42| ---------------------------- | ---------- |
43| 201 | Permission verification failed |
44| 202 | The caller is not a system application |
45| 401 | The input parameter is invalid. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types |
46| 143000001 | IPC error |
47
48**示例:**
49
50  ```ts
51  import { wantConstant } from '@kit.AbilityKit';
52  import { BusinessError } from '@kit.BasicServicesKit';
53  let uri: string = 'file://media/image/8';
54  let bundleName: string = 'com.demo.test';
55  try {
56    fileShare.grantUriPermission(uri, bundleName, wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION |
57      wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION, (err: BusinessError) => {
58      if (err) {
59        console.error("grantUriPermission failed with error: " + JSON.stringify(err));
60        return;
61      }
62      console.info("grantUriPermission success!");
63    });
64  } catch (err) {
65    let error: BusinessError = err as BusinessError;
66    console.error("grantUriPermission failed with error:" + JSON.stringify(error));
67  }
68  ```
69
70## fileShare.grantUriPermission
71
72grantUriPermission(uri: string, bundleName: string, flag: wantConstant.Flags): Promise&lt;void&gt;
73
74将公共目录文件URI进行授权操作,使用Promise异步回调。
75
76**需要权限**:ohos.permission.WRITE_MEDIA
77
78**系统接口**:此接口为系统接口
79
80**系统能力**:SystemCapability.FileManagement.AppFileService
81
82**参数:**
83
84| 参数名 | 类型   | 必填 | 说明                       |
85| ------ | ------ | ---- | -------------------------- |
86| uri   | string | 是   | 公共目录文件URI |
87| bundleName   | string | 是   | 分享目标的包名 |
88| flag   | [wantConstant.Flags](../apis-ability-kit/js-apis-app-ability-wantConstant.md#wantconstantflags) | 是   | 授权的权限。<br/>wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION:读授权<br/>wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION:写授权|
89
90**返回值:**
91
92  | 类型                           | 说明         |
93  | ---------------------------- | ---------- |
94  | Promise&lt;void&gt; | Promise对象,无返回值 |
95
96**错误码:**
97
98以下错误码的详细介绍请参见[文件管理错误码](errorcode-filemanagement.md)。
99
100| 错误码ID                     | 错误信息        |
101| ---------------------------- | ---------- |
102| 201 | Permission verification failed |
103| 202 | The caller is not a system application |
104| 401 | The input parameter is invalid. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types |
105| 143000001 | IPC error |
106
107**示例:**
108
109  ```ts
110  import { wantConstant } from '@kit.AbilityKit';
111  import { BusinessError } from '@kit.BasicServicesKit';
112  let uri: string = 'file://media/image/8';
113  let bundleName: string = 'com.demo.test';
114  try {
115    fileShare.grantUriPermission(uri, bundleName, wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION |
116      wantConstant.Flags.FLAG_AUTH_WRITE_URI_PERMISSION).then(() => {
117      console.info("grantUriPermission success!");
118    }).catch((error: BusinessError) => {
119      console.error("grantUriPermission failed with error:" + JSON.stringify(error));
120    });
121  } catch (err) {
122    let error: BusinessError = err as BusinessError;
123    console.error("grantUriPermission failed with error:" + JSON.stringify(error));
124  }
125  ```
126
127
128deactivatePermission(policies: Array&lt;PolicyInfo>): Promise&lt;void&gt;
129
130异步方法取消使能授权过的多个文件或目录,以promise形式返回结果,该接口仅对具有该系统能力的设备开放。
131
132**需要权限**:ohos.permission.FILE_ACCESS_PERSIST
133
134**系统能力:** SystemCapability.FileManagement.AppFileService.FolderAuthorization
135
136**参数:**
137
138| 参数名 | 类型 | 必填 | 说明                      |
139| -------- | -------- | -------- |-------------------------|
140| policies| Array&lt;[PolicyInfo](js-apis-fileShare.md#policyinfo11)> | 是 | 需要授权URI的策略信息。           |
141
142**返回值:**
143
144| 类型 | 说明 |
145| -------- | -------- |
146| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
147
148**错误码:**
149
150以下错误码的详细介绍请参见[文件管理子系统错误码](errorcode-filemanagement.md)。
151如果存在URI取消使能权限失败,则抛出13900001错误码,且失败URI信息将抛出异常data属性中以Array<[PolicyErrorResult](js-apis-fileShare.md#policyerrorresult11)>形式提供错误信息。
152
153| 错误码ID    | 错误信息       |
154|----------| --------- |
155| 201      | Permission verification failed, usually the result returned by VerifyAccessToken.|
156| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. |
157| 801      | Capability not supported. |
158| 13900001 | Operation not permitted.            |
159| 13900042 | Unknown error                          |
160
161**示例:**
162
163  ```ts
164import { BusinessError } from '@kit.BasicServicesKit';
165import  { picker } from '@kit.CoreFileKit';
166
167  async function deactivatePermissionExample() {
168    try {
169      let uri = "file://docs/storage/Users/username/tmp.txt";
170      let policyInfo: fileShare.PolicyInfo = {
171        uri: uri,
172        operationMode: fileShare.OperationMode.READ_MODE,
173      };
174      let policies: Array<fileShare.PolicyInfo> = [policyInfo];
175      fileShare.deactivatePermission(policies).then(() => {
176        console.info("deactivatePermission successfully");
177      }).catch((err: BusinessError<Array<fileShare.PolicyErrorResult>>) => {
178        console.info("deactivatePermission failed with error message: " + err.message + ", error code: " + err.code);
179          if (err.code == 13900001 && err.data) {
180            for (let i = 0; i < err.data.length; i++) {
181              console.log("error code : " + JSON.stringify(err.data[i].code));
182              console.log("error uri : " + JSON.stringify(err.data[i].uri));
183              console.log("error reason : " + JSON.stringify(err.data[i].message));
184            }
185          }
186      });
187    } catch (error) {
188      let err: BusinessError = error as BusinessError;
189      console.error('deactivatePermission failed with err: ' + JSON.stringify(err));
190    }
191  }
192  ```