• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Class (MediaAssetChangeRequest)
2<!--Kit: Media Library Kit-->
3<!--Subsystem: Multimedia-->
4<!--Owner: @yixiaoff-->
5<!--Designer: @liweilu1-->
6<!--Tester: @xchaosioda-->
7<!--Adviser: @zengyawen-->
8
9> **说明:**
10>
11> - 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
12> - 本Class首批接口从API version 11开始支持。
13
14MediaAssetChangeRequest implements [MediaChangeRequest](arkts-apis-photoAccessHelper-i.md#mediachangerequest11)
15
16资产变更请求。
17
18**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
19
20## 导入模块
21
22```ts
23import { photoAccessHelper } from '@kit.MediaLibraryKit';
24```
25
26## constructor<sup>11+</sup>
27
28constructor(asset: PhotoAsset)
29
30构造函数,用于初始化资产变更请求。
31
32**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
33
34**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
35
36**参数:**
37
38| 参数名   | 类型                      | 必填 | 说明       |
39| -------- | ------------------------- | ---- | ---------- |
40| asset | [PhotoAsset](arkts-apis-photoAccessHelper-PhotoAsset.md) | 是   | 需要变更的资产。 |
41
42**错误码:**
43
44接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
45
46| 错误码ID | 错误信息 |
47| -------- | ---------------------------------------- |
48| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
49| 14000011       | System inner fail.          |
50
51**示例:**
52
53phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
54
55```ts
56import { dataSharePredicates } from '@kit.ArkData';
57
58async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper) {
59  console.info('MediaAssetChangeRequest constructorDemo');
60  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
61  let fetchOptions: photoAccessHelper.FetchOptions = {
62    fetchColumns: [],
63    predicates: predicates
64  };
65  let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);
66  let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
67  let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(photoAsset);
68}
69```
70
71## createImageAssetRequest<sup>11+</sup>
72
73static createImageAssetRequest(context: Context, fileUri: string): MediaAssetChangeRequest
74
75创建图片资产变更请求。
76
77指定待创建资产的数据来源,可参考[FileUri](../apis-core-file-kit/js-apis-file-fileuri.md)。
78
79**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
80
81**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
82
83**参数:**
84
85| 参数名  | 类型    | 必填 | 说明                       |
86| ------- | ------- | ---- | -------------------------- |
87| context | [Context](../apis-ability-kit/js-apis-inner-application-context.md) | 是   | 传入Ability实例的上下文。 |
88| fileUri | string | 是   | 图片资产的数据来源,在应用沙箱下的uri。示例fileUri:'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.jpg'。 |
89
90**返回值:**
91
92| 类型                                    | 说明              |
93| --------------------------------------- | ----------------- |
94| [MediaAssetChangeRequest](arkts-apis-photoAccessHelper-MediaAssetChangeRequest.md) | 返回创建资产的变更请求。 |
95
96**错误码:**
97
98接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
99
100| 错误码ID | 错误信息 |
101| -------- | ---------------------------------------- |
102| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
103| 13900002   | The file corresponding to the URI is not in the app sandbox.         |
104| 14000011   | System inner fail.        |
105
106**示例:**
107
108phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
109
110```ts
111async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) {
112  console.info('createImageAssetRequestDemo');
113  try {
114    // 需要确保fileUri对应的资源存在。
115    let fileUri = 'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.jpg';
116    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createImageAssetRequest(context, fileUri);
117    await phAccessHelper.applyChanges(assetChangeRequest);
118    console.info('apply createImageAssetRequest successfully');
119  } catch (err) {
120    console.error(`createImageAssetRequestDemo failed with error: ${err.code}, ${err.message}`);
121  }
122}
123```
124
125## createVideoAssetRequest<sup>11+</sup>
126
127static createVideoAssetRequest(context: Context, fileUri: string): MediaAssetChangeRequest
128
129创建视频资产变更请求。
130
131指定待创建资产的数据来源,可参考[FileUri](../apis-core-file-kit/js-apis-file-fileuri.md)。
132
133**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
134
135**参数:**
136
137| 参数名  | 类型    | 必填 | 说明                       |
138| ------- | ------- | ---- | -------------------------- |
139| context | [Context](../apis-ability-kit/js-apis-inner-application-context.md) | 是   | 传入Ability实例的上下文。 |
140| fileUri | string | 是   | 视频资产的数据来源,在应用沙箱下的uri。示例fileUri:'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.mp4'。 |
141
142**返回值:**
143
144| 类型                                    | 说明              |
145| --------------------------------------- | ----------------- |
146| [MediaAssetChangeRequest](arkts-apis-photoAccessHelper-MediaAssetChangeRequest.md) | 返回创建资产的变更请求。 |
147
148**错误码:**
149
150接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
151
152| 错误码ID | 错误信息 |
153| -------- | ---------------------------------------- |
154| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
155| 13900002   | The file corresponding to the URI is not in the app sandbox.         |
156| 14000011   | System inner fail.        |
157
158**示例:**
159
160phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
161
162```ts
163async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) {
164  console.info('createVideoAssetRequestDemo');
165  try {
166    // 需要确保fileUri对应的资源存在。
167    let fileUri = 'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.mp4';
168    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createVideoAssetRequest(context, fileUri);
169    await phAccessHelper.applyChanges(assetChangeRequest);
170    console.info('apply createVideoAssetRequest successfully');
171  } catch (err) {
172    console.error(`createVideoAssetRequestDemo failed with error: ${err.code}, ${err.message}`);
173  }
174}
175```
176
177## createAssetRequest<sup>11+</sup>
178
179static createAssetRequest(context: Context, photoType: PhotoType, extension: string, options?: CreateOptions): MediaAssetChangeRequest
180
181指定文件类型和扩展名,创建资产变更请求。
182
183**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
184
185**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
186
187**参数:**
188
189| 参数名  | 类型    | 必填 | 说明                       |
190| ------- | ------- | ---- | -------------------------- |
191| context | [Context](../apis-ability-kit/js-apis-inner-application-context.md) | 是   | 传入Ability实例的上下文。 |
192| photoType  | [PhotoType](arkts-apis-photoAccessHelper-e.md#phototype)        | 是   | 待创建的文件类型,IMAGE或者VIDEO类型。              |
193| extension  | string        | 是   | 文件扩展名,例如:'jpg'。              |
194| options  | [CreateOptions](arkts-apis-photoAccessHelper-i.md#createoptions)        | 否   | 创建选项,例如:{title: 'testPhoto'}。<br>文件名中不允许出现非法英文字符,包括: . .. \ / : * ? " ' ` < > \| { } [ ]|
195
196**返回值:**
197
198| 类型                                    | 说明              |
199| --------------------------------------- | ----------------- |
200| [MediaAssetChangeRequest](arkts-apis-photoAccessHelper-MediaAssetChangeRequest.md) | 返回创建资产的变更请求。 |
201
202**错误码:**
203
204接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
205
206| 错误码ID | 错误信息 |
207| -------- | ---------------------------------------- |
208| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
209| 14000011       | System inner fail.         |
210
211**示例:**
212
213phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
214
215```ts
216async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) {
217  console.info('createAssetRequestDemo');
218  try {
219    let photoType: photoAccessHelper.PhotoType = photoAccessHelper.PhotoType.IMAGE;
220    let extension: string = 'jpg';
221    let options: photoAccessHelper.CreateOptions = {
222      title: 'testPhoto'
223    }
224    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createAssetRequest(context, photoType, extension, options);
225    // 需要确保fileUri对应的资源存在。
226    let fileUri = 'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.jpg';
227    assetChangeRequest.addResource(photoAccessHelper.ResourceType.IMAGE_RESOURCE, fileUri);
228    await phAccessHelper.applyChanges(assetChangeRequest);
229    console.info('apply createAssetRequest successfully');
230  } catch (err) {
231    console.error(`createAssetRequestDemo failed with error: ${err.code}, ${err.message}`);
232  }
233}
234```
235
236## deleteAssets<sup>11+</sup>
237
238static deleteAssets(context: Context, assets: Array&lt;PhotoAsset&gt;): Promise&lt;void&gt;
239
240删除媒体文件,删除的文件进入到回收站,使用Promise方式返回结果。
241
242**需要权限**:ohos.permission.WRITE_IMAGEVIDEO
243
244**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
245
246**参数:**
247
248| 参数名  | 类型    | 必填 | 说明                       |
249| ------- | ------- | ---- | -------------------------- |
250| context | [Context](../apis-ability-kit/js-apis-inner-application-context.md) | 是   | 传入Ability实例的上下文。 |
251| assets | Array&lt;[PhotoAsset](arkts-apis-photoAccessHelper-PhotoAsset.md)&gt; | 是   | 待删除的媒体文件数组,数组中元素个数不超过300个。<!--Del-->系统应用对此无限制。<!--DelEnd--> |
252
253**返回值:**
254
255| 类型                                    | 说明              |
256| --------------------------------------- | ----------------- |
257| Promise&lt;void&gt;| Promise对象,返回void。 |
258
259**错误码:**
260
261接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
262
263| 错误码ID | 错误信息 |
264| -------- | ---------------------------------------- |
265| 201      |  Permission denied.         |
266| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
267| 14000011 |  System inner fail.         |
268
269**示例:**
270
271phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
272
273```ts
274import { dataSharePredicates } from '@kit.ArkData';
275
276async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) {
277  console.info('deleteAssetsDemo');
278  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
279  let fetchOptions: photoAccessHelper.FetchOptions = {
280    fetchColumns: [],
281    predicates: predicates
282  };
283  try {
284    let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);
285    let photoAssetList: Array<photoAccessHelper.PhotoAsset> = await fetchResult.getAllObjects();
286    await photoAccessHelper.MediaAssetChangeRequest.deleteAssets(context, photoAssetList);
287    console.info('deleteAssets successfully');
288  } catch (err) {
289    console.error(`deleteAssetsDemo failed with error: ${err.code}, ${err.message}`);
290  }
291}
292```
293
294## deleteAssets<sup>11+</sup>
295
296static deleteAssets(context: Context, uriList: Array&lt;string&gt;): Promise&lt;void&gt;
297
298删除媒体文件,删除的文件进入到回收站,使用Promise方式返回结果。
299
300**需要权限**:ohos.permission.WRITE_IMAGEVIDEO
301
302**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
303
304**参数:**
305
306| 参数名  | 类型    | 必填 | 说明                       |
307| ------- | ------- | ---- | -------------------------- |
308| context | [Context](../apis-ability-kit/js-apis-inner-application-context.md) | 是   | 传入Ability实例的上下文。 |
309| uriList | Array&lt;string&gt; | 是   | 待删除的媒体文件uri数组,数组中元素个数不超过300个。<!--Del-->系统应用对此无限制。<!--DelEnd--> |
310
311**返回值:**
312
313| 类型                                    | 说明              |
314| --------------------------------------- | ----------------- |
315| Promise&lt;void&gt;| Promise对象,返回void。 |
316
317**错误码:**
318
319接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
320
321| 错误码ID | 错误信息 |
322| -------- | ---------------------------------------- |
323| 201      |  Permission denied.         |
324| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
325| 14000002 |  The uri format is incorrect or does not exist.         |
326| 14000011 |  System inner fail.         |
327
328**示例:**
329
330phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
331
332```ts
333import { dataSharePredicates } from '@kit.ArkData';
334
335async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) {
336  console.info('deleteAssetsDemo');
337  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
338  let fetchOptions: photoAccessHelper.FetchOptions = {
339    fetchColumns: [],
340    predicates: predicates
341  };
342  try {
343    let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);
344    let asset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
345    await photoAccessHelper.MediaAssetChangeRequest.deleteAssets(context, [asset.uri]);
346    console.info('deleteAssets successfully');
347  } catch (err) {
348    console.error(`deleteAssetsDemo failed with error: ${err.code}, ${err.message}`);
349  }
350}
351```
352
353## getAsset<sup>11+</sup>
354
355getAsset(): PhotoAsset
356
357获取当前资产变更请求中的资产。
358
359**注意**:对于创建资产的变更请求,在调用[applyChanges](arkts-apis-photoAccessHelper-PhotoAccessHelper.md#applychanges11)提交生效之前,该接口返回null。
360
361**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
362
363**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
364
365**返回值:**
366
367| 类型                                    | 说明              |
368| --------------------------------------- | ----------------- |
369| [PhotoAsset](arkts-apis-photoAccessHelper-PhotoAsset.md) | 返回当前资产变更请求中的资产。 |
370
371**错误码:**
372
373接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
374
375| 错误码ID | 错误信息 |
376| -------- | ---------------------------------------- |
377| 401    | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
378| 14000011 |  System inner fail.         |
379
380**示例:**
381
382phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
383
384```ts
385async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) {
386  console.info('getAssetDemo');
387  try {
388    // 需要确保fileUri对应的资源存在。
389    let fileUri = 'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.jpg';
390    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createImageAssetRequest(context, fileUri);
391    await phAccessHelper.applyChanges(assetChangeRequest);
392    let asset: photoAccessHelper.PhotoAsset = assetChangeRequest.getAsset();
393    console.info('create asset successfully with uri = ' + asset.uri);
394  } catch (err) {
395    console.error(`getAssetDemo failed with error: ${err.code}, ${err.message}`);
396  }
397}
398```
399
400## setTitle<sup>11+</sup>
401
402setTitle(title: string): void
403
404修改媒体资产的标题。
405
406**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
407
408**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
409
410**参数:**
411
412| 参数名        | 类型      | 必填   | 说明                                 |
413| ---------- | ------- | ---- | ---------------------------------- |
414| title | string | 是   | 待修改的资产标题。 |
415
416title参数规格为:
417- 不应包含扩展名。
418- 文件名字符串长度为1~255。
419- 不允许出现的非法英文字符,包括:<br> . \ / : * ? " ' ` < > | { } [ ]
420
421**错误码:**
422
423接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
424
425| 错误码ID | 错误信息 |
426| -------- | ---------------------------------------- |
427| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
428| 14000011       | System inner fail.         |
429
430**示例:**
431
432phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
433
434```ts
435import { dataSharePredicates } from '@kit.ArkData';
436import { BusinessError } from '@kit.BasicServicesKit';
437
438async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper) {
439  console.info('setTitleDemo');
440  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
441  let fetchOption: photoAccessHelper.FetchOptions = {
442    fetchColumns: [],
443    predicates: predicates
444  };
445  let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOption);
446  let asset = await fetchResult.getFirstObject();
447  let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset);
448  let newTitle: string = 'newTitle';
449  assetChangeRequest.setTitle(newTitle);
450  phAccessHelper.applyChanges(assetChangeRequest).then(() => {
451    console.info('apply setTitle successfully');
452  }).catch((err: BusinessError) => {
453    console.error(`apply setTitle failed with error: ${err.code}, ${err.message}`);
454  });
455}
456```
457
458## getWriteCacheHandler<sup>11+</sup>
459
460getWriteCacheHandler(): Promise&lt;number&gt;
461
462获取临时文件写句柄。
463
464**注意**:对于同一个资产变更请求,不支持在成功获取临时文件写句柄后,重复调用该接口。
465
466**需要权限**:ohos.permission.WRITE_IMAGEVIDEO
467
468**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
469
470**返回值:**
471
472| 类型                                    | 说明              |
473| --------------------------------------- | ----------------- |
474| Promise&lt;number&gt; | Promise对象,返回临时文件写句柄。 |
475
476**错误码:**
477
478接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
479
480| 错误码ID | 错误信息 |
481| -------- | ---------------------------------------- |
482| 201   | Permission denied.        |
483| 401    | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
484| 14000011 |  System inner fail.        |
485| 14000016 |  Operation Not Support.     |
486
487**示例:**
488
489phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
490
491```ts
492import { fileIo } from '@kit.CoreFileKit';
493
494async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) {
495  console.info('getWriteCacheHandlerDemo');
496  try {
497    let photoType: photoAccessHelper.PhotoType = photoAccessHelper.PhotoType.VIDEO;
498    let extension: string = 'mp4';
499    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createAssetRequest(context, photoType, extension);
500    let fd: number = await assetChangeRequest.getWriteCacheHandler();
501    console.info('getWriteCacheHandler successfully');
502    // write date into fd..
503    await fileIo.close(fd);
504    await phAccessHelper.applyChanges(assetChangeRequest);
505  } catch (err) {
506    console.error(`getWriteCacheHandlerDemo failed with error: ${err.code}, ${err.message}`);
507  }
508}
509```
510
511## addResource<sup>11+</sup>
512
513addResource(type: ResourceType, fileUri: string): void
514
515通过[fileUri](../apis-core-file-kit/js-apis-file-fileuri.md)从应用沙箱添加资源。
516
517**注意**:对于同一个资产变更请求,成功添加资源后不支持重复调用该接口。对于动态照片,可调用两次该接口分别添加图片和视频资源。
518
519**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
520
521**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
522
523**参数:**
524
525| 参数名  | 类型    | 必填 | 说明                       |
526| ------- | ------- | ---- | -------------------------- |
527| type | [ResourceType](arkts-apis-photoAccessHelper-e.md#resourcetype11) | 是   | 待添加资源的类型。 |
528| fileUri | string | 是   | 待添加资源的数据来源,在应用沙箱下的uri。示例fileUri:'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.jpg'。 |
529
530**错误码:**
531
532接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
533
534| 错误码ID | 错误信息 |
535| -------- | ---------------------------------------- |
536| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
537| 13900002      |  The file corresponding to the URI is not in the app sandbox.   |
538| 14000011 |  System inner fail.         |
539| 14000016 |  Operation Not Support.     |
540
541**示例:**
542
543phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
544
545```ts
546async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) {
547  console.info('addResourceByFileUriDemo');
548  try {
549    let photoType: photoAccessHelper.PhotoType = photoAccessHelper.PhotoType.IMAGE;
550    let extension: string = 'jpg';
551    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createAssetRequest(context, photoType, extension);
552    // 需要确保fileUri对应的资源存在。
553    let fileUri = 'file://com.example.temptest/data/storage/el2/base/haps/entry/files/test.jpg';
554    assetChangeRequest.addResource(photoAccessHelper.ResourceType.IMAGE_RESOURCE, fileUri);
555    await phAccessHelper.applyChanges(assetChangeRequest);
556    console.info('addResourceByFileUri successfully');
557  } catch (err) {
558    console.error(`addResourceByFileUriDemo failed with error: ${err.code}, ${err.message}`);
559  }
560}
561```
562
563## addResource<sup>11+</sup>
564
565addResource(type: ResourceType, data: ArrayBuffer): void
566
567通过ArrayBuffer数据添加资源。
568
569**注意**:对于同一个资产变更请求,成功添加资源后不支持重复调用该接口。对于动态照片,可调用两次该接口分别添加图片和视频资源。
570
571**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
572
573**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
574
575**参数:**
576
577| 参数名  | 类型    | 必填 | 说明                       |
578| ------- | ------- | ---- | -------------------------- |
579| type | [ResourceType](arkts-apis-photoAccessHelper-e.md#resourcetype11) | 是   | 待添加资源的类型。 |
580| data | ArrayBuffer | 是   | 待添加资源的数据。 |
581
582**错误码:**
583
584接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
585
586| 错误码ID | 错误信息 |
587| -------- | ---------------------------------------- |
588| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
589| 14000011 |  System inner fail.         |
590| 14000016 |  Operation Not Support.     |
591
592**示例:**
593
594phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
595
596```ts
597async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, context: Context) {
598  console.info('addResourceByArrayBufferDemo');
599  try {
600    let photoType: photoAccessHelper.PhotoType = photoAccessHelper.PhotoType.IMAGE;
601    let extension: string = 'jpg';
602    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = photoAccessHelper.MediaAssetChangeRequest.createAssetRequest(context, photoType, extension);
603    let buffer: ArrayBuffer = new ArrayBuffer(2048);
604    assetChangeRequest.addResource(photoAccessHelper.ResourceType.IMAGE_RESOURCE, buffer);
605    await phAccessHelper.applyChanges(assetChangeRequest);
606    console.info('addResourceByArrayBuffer successfully');
607  } catch (err) {
608    console.error(`addResourceByArrayBufferDemo failed with error: ${err.code}, ${err.message}`);
609  }
610}
611```
612
613## saveCameraPhoto<sup>12+</sup>
614
615saveCameraPhoto(): void
616
617保存相机拍摄的照片。
618
619**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
620
621**错误码:**
622
623接口抛出错误码的详细介绍请参见[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
624
625| 错误码ID | 错误信息 |
626| -------- | ---------------------------------------- |
627| 14000011 |  System inner fail.         |
628| 14000016 |  Operation Not Support.         |
629
630**示例:**
631
632phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
633
634```ts
635async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, asset: photoAccessHelper.PhotoAsset) {
636  console.info('saveCameraPhotoDemo');
637  try {
638    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset);
639    assetChangeRequest.saveCameraPhoto();
640    await phAccessHelper.applyChanges(assetChangeRequest);
641    console.info('apply saveCameraPhoto successfully');
642  } catch (err) {
643    console.error(`apply saveCameraPhoto failed with error: ${err.code}, ${err.message}`);
644  }
645}
646```
647
648## saveCameraPhoto<sup>13+</sup>
649
650saveCameraPhoto(imageFileType: ImageFileType): void
651
652保存相机拍摄的照片。
653
654**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
655
656**参数:**
657
658| 参数名   | 类型                      | 必填 | 说明       |
659| -------- | ------------------------- | ---- | ---------- |
660| imageFileType | [ImageFileType](arkts-apis-photoAccessHelper-e.md#imagefiletype13)  | 是   | 需要保存的类型。 |
661
662**错误码:**
663
664接口抛出错误码的详细介绍请参见[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
665
666| 错误码ID | 错误信息 |
667| -------- | ---------------------------------------- |
668| 14000011 |  System inner fail.         |
669| 14000016 |  Operation Not Support.         |
670
671**示例:**
672
673phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
674
675```ts
676import { dataSharePredicates } from '@kit.ArkData';
677import { image } from '@kit.ImageKit';
678
679async function example(context: Context, asset: photoAccessHelper.PhotoAsset) {
680  console.info('saveCameraPhotoDemo');
681  try {
682    let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);
683    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset);
684    assetChangeRequest.saveCameraPhoto(photoAccessHelper.ImageFileType.JPEG);
685    await phAccessHelper.applyChanges(assetChangeRequest);
686    console.info('apply saveCameraPhoto successfully');
687  } catch (err) {
688    console.error(`apply saveCameraPhoto failed with error: ${err.code}, ${err.message}`);
689  }
690}
691```
692
693## discardCameraPhoto<sup>12+</sup>
694
695discardCameraPhoto(): void
696
697删除相机拍摄的照片。
698
699**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
700
701**错误码:**
702
703接口抛出错误码的详细介绍请参见[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
704
705| 错误码ID | 错误信息 |
706| -------- | ---------------------------------------- |
707| 14000011 |  Internal system error.         |
708| 14000016 |  Operation Not Support.         |
709
710**示例:**
711
712phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
713
714```ts
715async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper, asset: photoAccessHelper.PhotoAsset) {
716  console.info('discardCameraPhotoDemo');
717  try {
718    let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset);
719    assetChangeRequest.discardCameraPhoto();
720    await phAccessHelper.applyChanges(assetChangeRequest);
721    console.info('apply discardCameraPhoto successfully');
722  } catch (err) {
723    console.error(`apply discardCameraPhoto failed with error: ${err.code}, ${err.message}`);
724  }
725}
726```
727
728## setOrientation<sup>15+</sup>
729
730setOrientation(orientation: number): void
731
732修改图片的旋转角度。
733
734**系统能力**:SystemCapability.FileManagement.PhotoAccessHelper.Core
735
736**参数:**
737
738| 参数名        | 类型      | 必填   | 说明                                 |
739| ---------- | ------- | ---- | ---------------------------------- |
740| orientation | number | 是   | 待修改的图片旋转角度,且只能为0、90、180、270。 |
741
742**错误码:**
743
744接口抛出错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[文件管理错误码](../apis-core-file-kit/errorcode-filemanagement.md)。
745
746| 错误码ID | 错误信息 |
747| -------- | ---------------------------------------- |
748| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
749| 14000011 |  Internal system error.         |
750
751**示例:**
752
753phAccessHelper的创建请参考[photoAccessHelper.getPhotoAccessHelper](arkts-apis-photoAccessHelper-f.md#photoaccesshelpergetphotoaccesshelper)的示例使用。
754
755```ts
756import { dataSharePredicates } from '@kit.ArkData';
757import { BusinessError } from '@kit.BasicServicesKit';
758
759async function example(phAccessHelper: photoAccessHelper.PhotoAccessHelper) {
760  console.info('setOrientationDemo');
761  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
762  let fetchOption: photoAccessHelper.FetchOptions = {
763    fetchColumns: [],
764    predicates: predicates
765  };
766  let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOption);
767  let asset = await fetchResult.getFirstObject();
768  let assetChangeRequest: photoAccessHelper.MediaAssetChangeRequest = new photoAccessHelper.MediaAssetChangeRequest(asset);
769  assetChangeRequest.setOrientation(90);
770  phAccessHelper.applyChanges(assetChangeRequest).then(() => {
771    console.info('apply setOrientation successfully');
772  }).catch((err: BusinessError) => {
773    console.error(`apply setOrientation failed with error: ${err.code}, ${err.message}`);
774  });
775}
776```
777