1# 文件子系统ChangeLog 2 3## cl.file.1 mediaLibrary相关接口支持范围兼容性变更 4 5[mediaLibrary](../../../application-dev/reference/apis/js-apis-medialibrary.md)部分接口支持范围兼容性变更。 6 71. 因文件子系统目录框架调整,开发者在访问文档类目录(Documents、Download)不应再使用媒体库(mediaLibrary)的接口,建议使用[FilePicker](../../../application-dev/reference/apis/js-apis-file-picker.md)接口替代。 8 9- 调整前属于媒体库管控的目录有: 10 11 相机(Camera)、视频(Videos)、图片(Pictures)、音频(Audios)、文档(Documents、Download)。 12 13- 调整后属于媒体库管控的目录有: 14 15 相机(Camera)、视频(Videos)、图片(Pictures)、音频(Audios)。 16 172. 对应的资源uri格式发生变化,参见:[文件子系统ChangeLog](../OpenHarmony_4.0.11.2/changelogs-filemanagement.md)。 18 19**变更影响** 20 21基于此前版本开发的应用,请排查是否有通过调用媒体库接口对文档类目录(Documents、Download)和目录下的文件进行操作的情况,如有请尽快进行适配修改。 22 23**关键接口/组件变更** 24 25| 模块名 | 方法/属性/枚举/常量 | 变更类型 | 26| ------------------------- | ------------------------------------------------------------ | -------- | 27| medialibrary | **function** getFileAssets(options: MediaFetchOptions, callback: AsyncCallback<FetchFileResult>): void | 接口支持范围兼容性变更 | 28| medialibrary | **function** getFileAssets(options: MediaFetchOptions): Promise<FetchFileResult> | 接口支持范围兼容性变更 | 29| medialibrary | **function** createAsset(mediaType: MediaType, displayName: string, relativePath: string, callback: AsyncCallback<FileAsset>): void | 接口支持范围兼容性变更 | 30| medialibrary | **function** createAsset(mediaType: MediaType, displayName: string, relativePath: string): Promise<FileAsset> | 接口支持范围兼容性变更 | 31| medialibrary | **function** deleteAsset(uri: string, callback: AsyncCallback<void>): void | 接口支持范围兼容性变更 | 32| medialibrary | **function** deleteAsset(uri: string): Promise<void> | 接口支持范围兼容性变更 | 33| medialibrary | **function** getPublicDirectory(type: DirectoryType, callback: AsyncCallback<string>): void | 接口支持范围兼容性变更 | 34| medialibrary | **function** getPublicDirectory(type: DirectoryType): Promise<string> | 接口支持范围兼容性变更 | 35| medialibrary | **function** storeMediaAsset(option: MediaAssetOption, callback: AsyncCallback<string>): void | 接口支持范围兼容性变更 | 36| medialibrary | **function** storeMediaAsset(option: MediaAssetOption): Promise<string> | 接口支持范围兼容性变更 | 37| medialibrary | **interface** DirectoryType | 接口支持范围兼容性变更 | 38| medialibrary | **interface** MediaAssetOption | 接口支持范围兼容性变更 | 39 40**getFileAssets接口支持范围兼容性变更影响:** 41 42由于API version 10上文件子系统目录框架调整,getFileAssets将无法获取到文档类目录(Documents、Download)下的文件资源。推荐使用[FilePicker](../../../application-dev/reference/apis/js-apis-file-picker.md)获取文件资源。 43 44**createAsset接口支持范围兼容性变更影响:** 45 46由于API version 10上文件子系统目录框架调整,createAsset接口参数中relativePath填写文档类目录(Documents、Download)及其以下的路径将无法在对应目录下创建文件资源。推荐使用[FilePicker](../../../application-dev/reference/apis/js-apis-file-picker.md)创建文件资源。 47 48**deleteAsset接口支持范围兼容性变更影响:** 49 50由于API version 10上文件子系统目录框架调整,deleteAsset接口参数中uri指向的是文档类目录(Documents、Download)下的文件资源将无法删除对应文件资源。推荐使用[fileAccess.delete](../../../application-dev/reference/apis/js-apis-fileAccess.md)删除文件资源 51 52**getPublicDirectory接口支持范围兼容性变更影响:** 53 54由于API version 10上文件子系统目录框架调整,getPublicDirectory接口参数中type填写mediaLibrary.DirectoryType.DIR_DOCUMENTS和mediaLibrary.DirectoryType.DIR_DOWNLOAD将无法获取对应的公共目录路径。 55 56**storeMediaAsset接口支持范围兼容性变更影响:** 57 58由于API version 10上文件子系统目录框架调整,storeMediaAsset接口参数中MediaAssetOption.relativePath填写文档类目录(Documents、Download)及其以下的路径将无法在对应目录下保存创建文件资源。推荐使用[FilePicker](../../../application-dev/reference/apis/js-apis-file-picker.md)保存文件资源。 59 60**DirectoryType接口支持范围兼容性变更影响:** 61 62由于API version 10上文件子系统目录框架调整,DirectoryType属性中mediaLibrary.DirectoryType.DIR_DOCUMENTS和mediaLibrary.DirectoryType.DIR_DOWNLOAD表示的目录类型不再归媒体库管控,请不要继续使用此目录类型。 63 64**MediaAssetOption接口支持范围兼容性变更影响:** 65 66由于API version 10上文件子系统目录框架调整,MediaAssetOption属性中relativePath填写文档类目录(Documents、Download)及其以下的路径在使用storeMediaAsset接口保存文件时将无法保存,请不要在填写与其相关的路径。 67 68**适配指导** 69 70在API version 10上,对文件子系统目录框架调整,文档类目录(Documents、Download)和此目录下的文件不再属于媒体库管控。继续通过媒体库接口对其进行操作会存在无法达到预期效果的情况,推荐使用[FilePicker](../../../application-dev/reference/apis/js-apis-file-picker.md)对文档类目录(Documents、Download)下的文件进行文件选择和保存等操作。 71 72 73 74以下为典型的场景适配指导和示例: 75 76**变更前,使用mediaLibrary接口编辑公共目录下的文件示例(公共目录Documents和Download后续不支持):** 77 781. 使用getMediaLibrary接口获取媒体库实例。 792. 创建MediaFetchOptions检索条件使用mediaLibrary实例调用getFileAssets接口获取公共目录下的文件。 803. 使用FetchFileResult相应接口获取目的文件的fileAsset。 814. 使用fileAsset.open接口打开这个文件得到fd。 825. 通过fd使用[fs.writeSync](../../../application-dev/reference/apis/js-apis-file-fs.md#writesync)接口对这个文件进行编辑修改。 836. 修改完成后使用fileAsset.close接口关闭这个文件的fd。 847. 使用fetchFileResult.close接口释放getFileAssets时占用的资源。 858. 使用release接口释放媒体库实例。 86 87**示例:** 88 89```js 90import mediaLibrary from '@ohos.multimedia.mediaLibrary'; 91import fs from '@ohos.file.fs'; 92 93async function example() { 94 try { 95 let context = getContext(this); 96 let media = mediaLibrary.getMediaLibrary(context); 97 let fileKeyObj = mediaLibrary.FileKey; 98 let imageType = mediaLibrary.MediaType.IMAGE; 99 let getImageOp = { 100 selections: fileKeyObj.MEDIA_TYPE + '= ?', 101 selectionArgs: [imageType.toString()], 102 order: fileKeyObj.DATE_ADDED + ' DESC', 103 }; 104 const fetchFileResult = await media.getFileAssets(getImageOp); 105 const fileAsset = await fetchFileResult.getFirstObject(); 106 console.info('mediaLibrary fileAsset displayName: ' + fileAsset.displayName); 107 let fd = await fileAsset.open('rw'); 108 console.info('mediaLibrary fileAsset open fd: ' + fd); 109 let writeLen = fs.writeSync(fd, 'hello, world'); 110 console.info('write data to file succeed and size is: ' + writeLen); 111 fileAsset.close(fd); 112 fetchFileResult.close(); 113 media.release(); 114 } catch (err) { 115 console.error('mediaLibrary fail, err: ' + err); 116 } 117} 118``` 119 120**变更后,使用FilePicker编辑公共目录下的文件示例:** 121 1221. 获取DocumentViewPicker文件选择器对象。 1232. 拉起DocumentViewPicker.select接口选择目的文件。 1243. 用户选择完后返回目的文件的uri。 1254. 待界面从DocumentViewPicker返回后在其他函数中使用[fs.openSync](../../../application-dev/reference/apis/js-apis-file-fs.md#fsopensync)接口通过uri打开这个文件得到fd。 1265. 通过fd使用[fs.writeSync](../../../application-dev/reference/apis/js-apis-file-fs.md#writesync)接口对这个文件进行编辑修改。 1276. 编辑修改完毕后使用[fs.closeSync](../../../application-dev/reference/apis/js-apis-file-fs.md#closesync)接口关闭这个fd。 128 129**示例:** 130 131```js 132import picker from '@ohos.file.picker'; 133import fs from '@ohos.file.fs'; 134 135let uri; 136 137async function example() { 138 try { 139 let DocumentSelectOptions = new picker.DocumentSelectOptions(); 140 let documentPicker = new picker.DocumentViewPicker(); 141 documentPicker.select(DocumentSelectOptions).then((DocumentSelectResult) => { 142 console.info('DocumentViewPicker.select successfully, DocumentSelectResult uri: ' + JSON.stringify(DocumentSelectResult)); 143 uri = DocumentSelectResult[0]; 144 }).catch((err) => { 145 console.error('DocumentViewPicker.select failed with err: ' + err); 146 }); 147 } catch (err) { 148 console.error('DocumentViewPicker failed with err: ' + err); 149 } 150} 151 152async function writeFile() { 153 try { 154 let file = fs.openSync(uri, fs.OpenMode.READ_WRITE); 155 console.info('DocumentViewPicker file fd: ' + file.fd); 156 let writeLen = fs.writeSync(file.fd, 'hello, world'); 157 console.info('write data to file succeed and size is: ' + writeLen); 158 fs.closeSync(file); 159 } catch (err) { 160 console.error('DocumentViewPicker fail, err: ' + err); 161 } 162} 163``` 164 165**变更前,使用mediaLibrary接口在公共目录下创建文件示例(公共目录Documents和Download后续不支持):** 166 1671. 使用getMediaLibrary接口获取媒体库实例。 1682. 使用getPublicDirectory接口获取公共目录路径。 1693. 使用createAsset接口创建文件得到这个文件的fileAsset。 1704. 使用fileAsset.open接口打开这个文件得到fd。 1715. 通过fd使用fs.write接口对这个文件进行编辑修改。 1726. 修改完成后使用fileAsset.close接口关闭这个文件的fd。 1737. 使用release接口释放媒体库实例。 174 175**示例:** 176 177```js 178import mediaLibrary from '@ohos.multimedia.mediaLibrary'; 179import fs from '@ohos.file.fs'; 180 181async function example() { 182 try { 183 let context = getContext(this); 184 let media = mediaLibrary.getMediaLibrary(context); 185 let mediaType = mediaLibrary.MediaType.FILE; 186 let DIR_DOWNLOAD = mediaLibrary.DirectoryType.DIR_DOWNLOAD; 187 const path = await media.getPublicDirectory(DIR_DOWNLOAD); 188 const fileAsset = await media.createAsset(mediaType, 'test.txt', path); 189 console.info('mediaLibrary fileAsset displayName: ' + fileAsset.displayName); 190 let fd = await fileAsset.open('rw'); 191 console.info('mediaLibrary fileAsset open fd: ' + fd); 192 let writeLen = fs.writeSync(fd, 'hello, world'); 193 console.info('write data to file succeed and size is: ' + writeLen); 194 fileAsset.close(fd); 195 media.release(); 196 } catch (err) { 197 console.error('mediaLibrary fail, err: ' + err); 198 } 199} 200``` 201 202**变更后,使用FilePicker在公共目录下创建文件示例:** 203 2041. 获取DocumentViewPicker文件选择器对象。 2052. 拉起DocumentViewPicker.save接口创建保存一个空的文件。 2063. 用户保存完后返回目的文件的uri。 2074. 待界面从DocumentViewPicker返回后在其他函数中使用[fs.openSync](../../../application-dev/reference/apis/js-apis-file-fs.md#fsopensync)接口通过uri打开这个文件得到fd。 2085. 通过fd使用[fs.writeSync](../../../application-dev/reference/apis/js-apis-file-fs.md#writesync)接口对这个文件进行编辑修改。 2096. 编辑修改完毕后使用[fs.closeSync](../../../application-dev/reference/apis/js-apis-file-fs.md#closesync)接口关闭这个fd。 210 211**示例:** 212 213```js 214import picker from '@ohos.file.picker'; 215import fs from '@ohos.file.fs'; 216 217let uri; 218 219async function example() { 220 try { 221 let DocumentSaveOptions = new picker.DocumentSaveOptions(); 222 DocumentSaveOptions.newFileNames = ['DocumentViewPicker01.txt']; 223 let documentPicker = new picker.DocumentViewPicker(); 224 documentPicker.save(DocumentSaveOptions).then((DocumentSaveResult) => { 225 console.info('DocumentViewPicker.save successfully, DocumentSaveResult uri: ' + JSON.stringify(DocumentSaveResult)); 226 uri = DocumentSaveResult[0]; 227 }).catch((err) => { 228 console.error('DocumentViewPicker.save failed with err: ' + err); 229 }); 230 } catch (err) { 231 console.error('DocumentViewPicker failed with err: ' + err); 232 } 233} 234 235async function writeFile() { 236 try { 237 let file = fs.openSync(uri, fs.OpenMode.READ_WRITE); 238 console.info('DocumentViewPicker file fd: ' + file.fd); 239 let writeLen = fs.writeSync(file.fd, 'hello, world'); 240 console.info('write data to file succeed and size is: ' + writeLen); 241 fs.closeSync(file); 242 } catch (err) { 243 console.error('DocumentViewPicker fail, err: ' + err); 244 } 245} 246``` 247