1# 文件子系统ChangeLog
2
3## cl.file.1 mediaLibrary相关接口变更
4
5multimedia 部件 mediaLibrary所有接口废弃。
6
7**变更影响**
8
9[mediaLibrary](../../../application-dev/reference/apis/js-apis-medialibrary.md)所有接口废弃。系统只对三方应用开放公共目录下文件资源选择和保存功能,由[FilePicker](../../../application-dev/reference/apis/js-apis-file-picker.md)提供能力。
10基于此前版本开发的应用,需注意废弃接口的迭代更新。
11
12**关键接口/组件变更**
13
14以下为可以使用FilePicker替代的接口。
15
16| 模块名                    | 方法/属性/枚举/常量                                          | 变更类型 |
17| ------------------------- | ------------------------------------------------------------ | -------- |
18| medialibrary   |  **function** getMediaLibrary(context: Context): MediaLibrary; | 废弃     |
19| medialibrary   |  **function** getFileAssets(options: MediaFetchOptions, callback: AsyncCallback\<FetchFileResult\>): void | 废弃     |
20| medialibrary   |  **function** getFileAssets(options: MediaFetchOptions): Promise\<FetchFileResult\> | 废弃     |
21| medialibrary   |  **function** createAsset(mediaType: MediaType, displayName: string, relativePath: string, callback: AsyncCallback\<FileAsset\>): void | 废弃     |
22| medialibrary   |  **function** createAsset(mediaType: MediaType, displayName: string, relativePath: string): Promise\<FileAsset\> | 废弃     |
23| medialibrary   |  **function** getPublicDirectory(type: DirectoryType, callback: AsyncCallback\<string\>): void | 废弃     |
24| medialibrary   |  **function** getPublicDirectory(type: DirectoryType): Promise\<string\> | 废弃     |
25| medialibrary   |  **function** release(callback: AsyncCallback\<void\>): void  | 废弃     |
26| medialibrary   |  **function** release(): Promise\<void\> | 废弃     |
27| medialibrary   |  **function** FileAsset.open(mode: string, callback: AsyncCallback\<number\>): void | 废弃     |
28| medialibrary   |  **function** FileAsset.open(mode: string): Promise\<number\> | 废弃     |
29| medialibrary   |  **function** FileAsset.close(fd: number, callback: AsyncCallback\<void\>): void | 废弃     |
30| medialibrary   |  **function** FileAsset.close(fd: number): Promise\<void\> | 废弃     |
31| medialibrary   |  **function** FetchFileResult.getCount(): number | 废弃     |
32| medialibrary   |  **function** FetchFileResult.isAfterLast(): boolean | 废弃     |
33| medialibrary   |  **function** FetchFileResult.close(): void | 废弃     |
34| medialibrary   |  **function** FetchFileResult.getFirstObject(callback: AsyncCallback\<FileAsset\>): void | 废弃     |
35| medialibrary   |  **function** FetchFileResult.getFirstObject(): Promise\<FileAsset\> | 废弃     |
36| medialibrary   |  **function** FetchFileResult.getNextObject(callback: AsyncCallback\<FileAsset\>): void | 废弃     |
37| medialibrary   |  **function** FetchFileResult.getNextObject(): Promise\<FileAsset\> | 废弃     |
38| medialibrary   |  **function** FetchFileResult.getLastObject(callback: AsyncCallback\<FileAsset\>): void | 废弃     |
39| medialibrary   |  **function** FetchFileResult.getLastObject(): Promise\<FileAsset\> | 废弃     |
40| medialibrary   |  **function** FetchFileResult.getPositionObject(index: number, callback: AsyncCallback\<FileAsset\>): void | 废弃     |
41| medialibrary   |  **function** FetchFileResult.getPositionObject(index: number): Promise\<FileAsset\> | 废弃     |
42| medialibrary   |  **function** FetchFileResult.getAllObject(callback: AsyncCallback\<Array\<FileAsset\>\>): void | 废弃     |
43| medialibrary   |  **function** FetchFileResult.getAllObject(): Promise\<Array\<FileAsset\>\> | 废弃     |
44| medialibrary   |  **function** Album.getFileAssets(options: MediaFetchOptions, callback: AsyncCallback\<FetchFileResult\>): void | 废弃     |
45| medialibrary   |  **function** Album.getFileAssets(options?: MediaFetchOptions): Promise\<FetchFileResult\> | 废弃     |
46| medialibrary   |  **enum** FileKey | 废弃     |
47| medialibrary   |  **enum** DirectoryType | 废弃     |
48| medialibrary   |  **enum** MediaType | 废弃     |
49| medialibrary   |  **interface** MediaFetchOptions | 废弃     |
50| medialibrary   |  **interface** FileAsset | 废弃     |
51
52**适配指导**
53
54**使用mediaLibrary接口编辑公共目录下的文件示例:**
55
561. 使用getMediaLibrary接口获取媒体库实例。
572. 创建MediaFetchOptions检索条件使用mediaLibrary实例调用getFileAssets接口获取公共目录下的文件。
583. 使用FetchFileResult相应接口获取目的文件的fileAsset。
594. 使用fileAsset.open接口打开这个文件得到fd。
605. 通过fd使用[fs.writeSync](../../../application-dev/reference/apis/js-apis-file-fs.md#writesync)接口对这个文件进行编辑修改。
616. 修改完成后使用fileAsset.close接口关闭这个文件的fd。
627. 使用fetchFileResult.close接口释放getFileAssets时占用的资源。
638. 使用release接口释放媒体库实例。
64
65**示例:**
66
67```js
68import mediaLibrary from '@ohos.multimedia.mediaLibrary';
69import fs from '@ohos.file.fs';
70
71async function example() {
72  try {
73    let context = getContext(this);
74    let media = mediaLibrary.getMediaLibrary(context);
75    let fileKeyObj = mediaLibrary.FileKey;
76    let imageType = mediaLibrary.MediaType.IMAGE;
77    let getImageOp = {
78      selections: fileKeyObj.MEDIA_TYPE + '= ?',
79      selectionArgs: [imageType.toString()],
80      order: fileKeyObj.DATE_ADDED + ' DESC',
81    };
82    const fetchFileResult = await media.getFileAssets(getImageOp);
83    const fileAsset = await fetchFileResult.getFirstObject();
84    console.info('mediaLibrary fileAsset displayName: ' + fileAsset.displayName);
85    let fd = await fileAsset.open('rw');
86    console.info('mediaLibrary fileAsset open fd: ' + fd);
87    let writeLen = fs.writeSync(fd, 'hello, world');
88    console.info('write data to file succeed and size is: ' + writeLen);
89    fileAsset.close(fd);
90    fetchFileResult.close();
91    media.release();
92  } catch (err) {
93    console.error('mediaLibrary fail, err: ' + err);
94  }
95}
96```
97
98**使用FilePicker编辑公共目录下的文件示例:**
99
1001. 获取DocumentViewPicker文件选择器对象。
1012. 拉起DocumentViewPicker.select接口选择目的文件。
1023. 用户选择完后返回目的文件的uri。
1034. 待界面从DocumentViewPicker返回后在其他函数中使用[fs.openSync](../../../application-dev/reference/apis/js-apis-file-fs.md#fsopensync)接口通过uri打开这个文件得到fd。
1045. 通过fd使用[fs.writeSync](../../../application-dev/reference/apis/js-apis-file-fs.md#writesync)接口对这个文件进行编辑修改。
1056. 编辑修改完毕后使用[fs.closeSync](../../../application-dev/reference/apis/js-apis-file-fs.md#closesync)接口关闭这个fd。
106
107**示例:**
108
109```js
110import mediaLibrary from '@ohos.multimedia.mediaLibrary';
111import picker from '@ohos.file.picker';
112import fs from '@ohos.file.fs';
113
114let uri;
115
116async function example() {
117  try {
118    let DocumentSelectOptions = new picker.DocumentSelectOptions();
119    let documentPicker = new picker.DocumentViewPicker();
120    documentPicker.select(DocumentSelectOptions).then((DocumentSelectResult) => {
121      console.info('DocumentViewPicker.select successfully, DocumentSelectResult uri: ' + JSON.stringify(DocumentSelectResult));
122      uri = DocumentSelectResult[0];
123    }).catch((err) => {
124      console.error('DocumentViewPicker.select failed with err: ' + err);
125    });
126  } catch (err) {
127    console.error('DocumentViewPicker failed with err: ' + err);
128  }
129}
130
131async function writeFile() {
132  try {
133    let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);
134    console.info('DocumentViewPicker file fd: ' + file.fd);
135    let writeLen = fs.writeSync(file.fd, 'hello, world');
136    console.info('write data to file succeed and size is: ' + writeLen);
137    fs.closeSync(file);
138  } catch (err) {
139    console.error('DocumentViewPicker fail, err: ' + err);
140  }
141}
142```
143
144**使用mediaLibrary接口在公共目录下创建文件示例:**
145
1461. 使用getMediaLibrary接口获取媒体库实例。
1472. 使用getPublicDirectory接口获取公共目录路径。
1483. 使用createAsset接口创建文件得到这个文件的fileAsset。
1494. 使用fileAsset.open接口打开这个文件得到fd。
1505. 通过fd使用fs.write接口对这个文件进行编辑修改。
1516. 修改完成后使用fileAsset.close接口关闭这个文件的fd。
1527. 使用release接口释放媒体库实例。
153
154**示例:**
155
156```js
157import mediaLibrary from '@ohos.multimedia.mediaLibrary';
158import fs from '@ohos.file.fs';
159
160async function example() {
161  try {
162    let context = getContext(this);
163    let media = mediaLibrary.getMediaLibrary(context);
164    let mediaType = mediaLibrary.MediaType.FILE;
165    let DIR_DOWNLOAD = mediaLibrary.DirectoryType.DIR_DOWNLOAD;
166    const path = await media.getPublicDirectory(DIR_DOWNLOAD);
167    const fileAsset = await media.createAsset(mediaType, 'test.txt', path);
168    console.info('mediaLibrary fileAsset displayName: ' + fileAsset.displayName);
169    let fd = await fileAsset.open('rw');
170    console.info('mediaLibrary fileAsset open fd: ' + fd);
171    let writeLen = fs.writeSync(fd, 'hello, world');
172    console.info('write data to file succeed and size is: ' + writeLen);
173    fileAsset.close(fd);
174    media.release();
175  } catch (err) {
176    console.error('mediaLibrary fail, err: ' + err);
177  }
178}
179```
180
181**使用FilePicker在公共目录下创建文件示例:**
182
1831. 获取DocumentViewPicker文件选择器对象。
1842. 拉起DocumentViewPicker.save接口创建保存一个空的文件。
1853. 用户保存完后返回目的文件的uri。
1864. 待界面从DocumentViewPicker返回后在其他函数中使用[fs.openSync](../../../application-dev/reference/apis/js-apis-file-fs.md#fsopensync)接口通过uri打开这个文件得到fd。
1875. 通过fd使用[fs.writeSync](../../../application-dev/reference/apis/js-apis-file-fs.md#writesync)接口对这个文件进行编辑修改。
1886. 编辑修改完毕后使用[fs.closeSync](../../../application-dev/reference/apis/js-apis-file-fs.md#closesync)接口关闭这个fd。
189
190**示例:**
191
192```js
193import mediaLibrary from '@ohos.multimedia.mediaLibrary';
194import picker from '@ohos.file.picker';
195import fs from '@ohos.file.fs';
196
197let uri;
198
199async function example() {
200  try {
201    let DocumentSaveOptions = new picker.DocumentSaveOptions();
202    DocumentSaveOptions.newFileNames = ['DocumentViewPicker01.txt'];
203    let documentPicker = new picker.DocumentViewPicker();
204    documentPicker.save(DocumentSaveOptions).then((DocumentSaveResult) => {
205      console.info('DocumentViewPicker.save successfully, DocumentSaveResult uri: ' + JSON.stringify(DocumentSaveResult));
206      uri = DocumentSaveResult[0];
207    }).catch((err) => {
208      console.error('DocumentViewPicker.save failed with err: ' + err);
209    });
210  } catch (err) {
211    console.error('DocumentViewPicker failed with err: ' + err);
212  }
213}
214
215async function writeFile() {
216  try {
217    let file = fs.openSync(uri, fs.OpenMode.READ_WRITE);
218    console.info('DocumentViewPicker file fd: ' + file.fd);
219    let writeLen = fs.writeSync(file.fd, 'hello, world');
220    console.info('write data to file succeed and size is: ' + writeLen);
221    fs.closeSync(file);
222  } catch (err) {
223    console.error('DocumentViewPicker fail, err: ' + err);
224  }
225}
226```
227
228**关键接口/组件变更**
229
230medialibrary以下废弃接口由于功能管控,不对三方应用开放,无替代接口。
231
232| 模块名                    | 方法/属性/枚举/常量                                          | 变更类型 |
233| ------------------------- | ------------------------------------------------------------ | -------- |
234| medialibrary   |  **function** getMediaLibrary(): MediaLibrary; | 废弃     |
235| medialibrary   |  **function** on(type: 'deviceChange'\|'albumChange'\|'imageChange'\|'audioChange'\|'videoChange'\|'fileChange'\|'remoteFileChange', callback: Callback\<void\>): void | 废弃     |
236| medialibrary   |  **function** off(type: 'deviceChange'\|'albumChange'\|'imageChange'\|'audioChange'\|'videoChange'\|'fileChange'\|'remoteFileChange', callback?: Callback\<void\>): void | 废弃     |
237| medialibrary   |  **function** deleteAsset(uri: string): Promise\<void\> | 废弃     |
238| medialibrary   |  **function** deleteAsset(uri: string, callback: AsyncCallback\<void\>): void | 废弃     |
239| medialibrary   |  **function** storeMediaAsset(option: MediaAssetOption, callback: AsyncCallback\<string\>): void | 废弃     |
240| medialibrary   |  **function** storeMediaAsset(option: MediaAssetOption): Promise\<string\> | 废弃     |
241| medialibrary   |  **function** startImagePreview(images: Array\<string\>, index: number, callback: AsyncCallback\<void\>): void | 废弃     |
242| medialibrary   |  **function** startImagePreview(images: Array\<string\>, callback: AsyncCallback\<void\>): void | 废弃     |
243| medialibrary   |  **function** startImagePreview(images: Array\<string\>, index?: number): Promise\<void\> | 废弃     |
244| medialibrary   |  **function** startMediaSelect(option: MediaSelectOption, callback: AsyncCallback\<Array\<string\>\>): void | 废弃     |
245| medialibrary   |  **function** startMediaSelect(option: MediaSelectOption): Promise\<Array\<string\>\> | 废弃     |
246| medialibrary   |  **function** getActivePeers(): Promise\<Array\<PeerInfo\>\>; | 废弃     |
247| medialibrary   |  **function** getActivePeers(callback: AsyncCallback\<Array\<PeerInfo\>\>): void; | 废弃     |
248| medialibrary   |  **function** getAllPeers(): Promise\<Array\<PeerInfo\>\>; | 废弃     |
249| medialibrary   |  **function** FileAsset.isDirectory(callback: AsyncCallback\<boolean\>): void | 废弃     |
250| medialibrary   |  **function** FileAsset.isDirectory():Promise\<boolean\> | 废弃     |
251| medialibrary   |  **function** FileAsset.commitModify(callback: AsyncCallback\<void\>): void | 废弃     |
252| medialibrary   |  **function** FileAsset.commitModify(): Promise\<void\> | 废弃     |
253| medialibrary   |  **function** FileAsset.getThumbnail(callback: AsyncCallback\<image.PixelMap\>): void | 废弃     |
254| medialibrary   |  **function** FileAsset.getThumbnail(size: Size, callback: AsyncCallback\<image.PixelMap\>): void | 废弃     |
255| medialibrary   |  **function** FileAsset.getThumbnail(size?: Size): Promise\<image.PixelMap\> | 废弃     |
256| medialibrary   |  **function** FileAsset.favorite(isFavorite: boolean, callback: AsyncCallback\<void\>): void | 废弃     |
257| medialibrary   |  **function** FileAsset.favorite(isFavorite: boolean): Promise\<void\> | 废弃     |
258| medialibrary   |  **function** FileAsset.isFavorite(callback: AsyncCallback\<boolean\>): void | 废弃     |
259| medialibrary   |  **function** FileAsset.isFavorite():Promise\<boolean\>  | 废弃     |
260| medialibrary   |  **function** FileAsset.trash(isTrash: boolean, callback: AsyncCallback\<void\>): void | 废弃     |
261| medialibrary   |  **function** FileAsset.trash(isTrash: boolean): Promise\<void\> | 废弃     |
262| medialibrary   |  **function** FileAsset.isTrash(callback: AsyncCallback\<boolean\>): void | 废弃     |
263| medialibrary   |  **function** FileAsset.isTrash():Promise\<boolean\> | 废弃     |
264| medialibrary   |  **function** getAlbums(options: MediaFetchOptions, callback: AsyncCallback\<Array\<Album\>\>): void | 废弃     |
265| medialibrary   |  **function** getAlbums(options: MediaFetchOptions): Promise\<Array\<Album\>\> | 废弃     |
266| medialibrary   |  **function** Album.commitModify(callback: AsyncCallback\<void\>): void | 废弃     |
267| medialibrary   |  **function** Album.commitModify(): Promise\<void\> | 废弃     |
268| medialibrary   |  **enum** DeviceType | 废弃     |
269| medialibrary   |  **interface** PeerInfo | 废弃     |
270| medialibrary   |  **interface** Size  | 废弃     |
271| medialibrary   |  **interface** MediaAssetOption | 废弃     |
272| medialibrary   |  **interface** MediaSelectOption | 废弃     |