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 | 废弃 |