HarmonyOS API:文件管理

joytrian
发布于 2023-4-6 17:10
浏览
0收藏

版本:v3.1 Beta

@ohos.file.statvfs (文件系统空间统计)

更新时间: 2023-02-17 09:19


该模块提供文件系统相关存储信息的功能,向应用程序提供获取文件系统总字节数、空闲字节数的JS接口。


说明

本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

本模块支持对错误码进行处理,错误码及其适配方式请参考​​错误码适配指导​​。

导入模块

import statvfs from '@ohos.file.statvfs';

statvfs.getFreeSize

getFreeSize(path:string):Promise<number>

异步方法获取指定文件系统空闲字节数,以Promise形式返回结果。

系统能力:SystemCapability.FileManagement.File.FileIO

参数:

参数名

类型

必填

说明

path

string

需要查询的文件系统的文件路径

返回值:

类型

说明

Promise<number>

返回空闲字节数

示例:

let path = "/dev";
statvfs.getFreeSize(path).then((number) => {
  console.info("getFreeSize promise successfully, Size: " + number);
}).catch((err) => {
  console.info("getFreeSize failed with error message: " + err.message + ", error code: " + err.code);
});

statvfs.getFreeSize

getFreeSize(path:string, callback:AsyncCallback<number>): void

异步方法获取指定文件系统空闲字节数,使用callback形式返回结果。

系统能力:SystemCapability.FileManagement.File.FileIO

参数:

参数名

类型

必填

说明

path

string

需要查询的文件系统的文件路径

callback

AsyncCallback<number>

异步获取空闲字节数之后的回调

示例:

let path = "/dev";
statvfs.getFreeSize(path, (err, number) => {
  if (err) {
    console.info("getFreeSize failed with error message: " + err.message + ", error code: " + err.code);
  } else {
    console.info("getFreeSize callback successfully, Size: " + number);
  }
});

statvfs.getTotalSize

getTotalSize(path: string): Promise<number>

异步方法获取指定文件系统总字节数,以Promise形式返回结果。

系统能力:SystemCapability.FileManagement.File.FileIO

参数:

参数名

类型

必填

说明

path

string

需要查询的文件系统的文件路径

返回值:

类型

说明

Promise<number>

返回总字节数

示例:

let path = "/dev";
statvfs.getTotalSize(path).then((number) => {
  console.info("getTotalSize promise successfully, Size: " + number);
}).catch((err) => {
  console.info("getTotalSize with error message: " + err.message + ", error code: " + err.code);
});

statvfs.getTotalSize

getTotalSize(path: string, callback: AsyncCallback<number>): void

异步方法获取指定文件系统总字节数,使用callback形式返回结果。

系统能力:SystemCapability.FileManagement.File.FileIO

参数:

参数名

类型

必填

说明

path

string

需要查询的文件系统的文件路径

callback

AsyncCallback<number>

异步获取总字节数之后的回调

示例:

let path = "/dev";
statvfs.getTotalSize(path, (err, number) => {
  if (err) {
    console.info("getTotalSize with error message: " + err.message + ", error code: " + err.code);
  } else {
    console.info("getTotalSize promise successfully, Size: " + number);
  }
});

@ohos.multimedia.medialibrary (媒体库管理)

更新时间: 2023-03-03 17:21


说明

该组件从API Version 6开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

导入模块

import mediaLibrary from '@ohos.multimedia.mediaLibrary';

mediaLibrary.getMediaLibrary8+

getMediaLibrary(context: Context): MediaLibrary

获取媒体库的实例,用于访问和修改用户等个人媒体数据信息(如音频、视频、图片、文档等)。

此接口仅可在Stage模型下使用。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

context

Context

传入Ability实例的Context。

返回值:

类型

说明

​MediaLibrary​

媒体库实例

示例:(从API Version 9开始)

// 获取mediaLibrary实例,后续用到此实例均采用此处获取的实例
const context = getContext(this);
let media = mediaLibrary.getMediaLibrary(context);

示例:(API Version 8)

import featureAbility from '@ohos.ability.featureAbility';

let context = featureAbility.getContext();
let media = mediaLibrary.getMediaLibrary(context);

mediaLibrary.getMediaLibrary

getMediaLibrary(): MediaLibrary

获取媒体库的实例,用于访问和修改用户等个人媒体数据信息(如音频、视频、图片、文档等)。

此接口仅可在FA模型下使用。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

返回值:

类型

说明

​MediaLibrary​

媒体库实例

示例:

let media = mediaLibrary.getMediaLibrary();

MediaLibrary

getFileAssets7+

getFileAssets(options: MediaFetchOptions, callback: AsyncCallback<FetchFileResult>): void

获取文件资源,使用callback方式返回异步结果。

需要权限:ohos.permission.READ_MEDIA

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

options

​MediaFetchOptions​

文件获取选项

callback

AsyncCallback<​​FetchFileResult​​>

异步获取FetchFileResult之后的回调

示例:

async function example() {
    let fileKeyObj = mediaLibrary.FileKey;
    let imageType = mediaLibrary.MediaType.IMAGE;
    // 创建文件获取选项,此处参数为获取image类型的文件资源
    let imagesFetchOp = {
        selections: fileKeyObj.MEDIA_TYPE + '= ?',
        selectionArgs: [imageType.toString()],
    };
    // 获取文件资源,使用callback方式返回异步结果
    media.getFileAssets(imagesFetchOp, (error, fetchFileResult) => {
        // 判断获取的文件资源的检索结果集是否为undefined,若为undefined则接口调用失败
        if (fetchFileResult == undefined) {
            console.error('get fetchFileResult failed with error: ' + error);
            return;
        }
        // 获取文件检索结果集中的总数
        const count = fetchFileResult.getCount();
        // 判断结果集中的数量是否小于0,小于0时表示接口调用失败
        if (count < 0) {
            console.error('get count from fetchFileResult failed, count: ' + count);
            return;
        }
        // 判断结果集中的数量是否等于0,等于0时表示接口调用成功,但是检索结果集为空,请检查文件获取选项参数配置是否有误和设备中是否存在相应文件
        if (count == 0) {
            console.info('The count of fetchFileResult is zero');
            return;
        }
        console.info('Get fetchFileResult successfully, count: ' + count);
        // 获取文件检索结果集中的第一个资源,使用callback方式返回异步结果
        fetchFileResult.getFirstObject((error, fileAsset) => {
            // 检查获取的第一个资源是否为undefined,若为undefined则接口调用失败
            if (fileAsset == undefined) {
                console.error('get first object failed with error: ' + error);
                return;
            }
            console.info('fileAsset.displayName ' + '0 : ' + fileAsset.displayName);
            // 调用 getNextObject 接口获取下一个资源,直到最后一个
            for (let i = 1; i < count; i++) {
                fetchFileResult.getNextObject((error, fileAsset) => {
                    if (fileAsset == undefined) {
                        console.error('get next object failed with error: ' + error);
                        return;
                    }
                    console.info('fileAsset.displayName ' + i + ': ' + fileAsset.displayName);
                })
            }
        });
        // 释放FetchFileResult实例并使其失效。无法调用其他方法
        fetchFileResult.close();
    });
}

getFileAssets7+

getFileAssets(options: MediaFetchOptions): Promise<FetchFileResult>

获取文件资源,使用Promise方式返回结果。

需要权限:ohos.permission.READ_MEDIA

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

options

​MediaFetchOptions​

文件检索选项

返回值

类型

说明

​FetchFileResult​

文件数据结果集

示例:

async function example() {
    let fileKeyObj = mediaLibrary.FileKey;
    let imageType = mediaLibrary.MediaType.IMAGE;
    // 创建文件获取选项,此处参数为获取image类型的文件资源
    let imagesFetchOp = {
        selections: fileKeyObj.MEDIA_TYPE + '= ?',
        selectionArgs: [imageType.toString()],
    };
    // 获取文件资源,使用Promise方式返回结果
    media.getFileAssets(imagesFetchOp).then((fetchFileResult) => {
        // 获取文件检索结果集中的总数
        const count = fetchFileResult.getCount();
        // 判断结果集中的数量是否小于0,小于0时表示接口调用失败
        if (count < 0) {
            console.error('get count from fetchFileResult failed, count: ' + count);
            return;
        }
        // 判断结果集中的数量是否等于0,等于0时表示接口调用成功,但是检索结果集为空,请检查文件获取选项参数配置是否有误和设备中是否存在相应文件
        if (count == 0) {
            console.info('The count of fetchFileResult is zero');
            return;
        }
        console.info('Get fetchFileResult successfully, count: ' + count);
        // 获取文件检索结果集中的第一个资源,使用Promise方式返回异步结果
        fetchFileResult.getFirstObject().then((fileAsset) => {
            console.info('fileAsset.displayName ' + '0 : ' + fileAsset.displayName);
            // 调用 getNextObject 接口获取下一个资源,直到最后一个
            for (let i = 1; i < count; i++) {
                fetchFileResult.getNextObject().then((fileAsset) => {
                    console.info('fileAsset.displayName ' + i + ': ' + fileAsset.displayName);
                }).catch((error) => {
                    console.error('get next object failed with error: ' + error);
                })
            }
        }).catch((error) => {
            // 调用getFirstObject接口失败
            console.error('get first object failed with error: ' + error);
        });
        // 释放FetchFileResult实例并使其失效。无法调用其他方法
        fetchFileResult.close();
    }).catch((error) => {
        // 调用getFileAssets接口失败
        console.error('get file assets failed with error: ' + error);
    });
}

on8+

on(type: 'imageChange'|'audioChange'|'videoChange'|'fileChange', callback: Callback<void>): void

打开媒体库变更通知,使用callback方式返回异步结果。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

type

'imageChange'|'audioChange'|'videoChange'|'fileChange'

媒体类型

'imageChange': 图片文件变更

'audioChange': 音频文件变更

'videoChange': 视频文件变更

'fileChange': 文件变更

callback

Callback<void>

回调返回空

示例:

media.on('imageChange', () => {
    // image file had changed, do something
})

off8+

off(type: 'imageChange'|'audioChange'|'videoChange'|'fileChange', callback?: Callback<void>): void

关闭媒体库变更通知,使用callback方式返回异步结果。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

type

'imageChange'|'audioChange'|'videoChange'|'fileChange'

媒体类型

'imageChange': 图片文件变更

'audioChange': 音频文件变更

'videoChange': 视频文件变更

'fileChange': 文件变更

callback

Callback<void>

回调返回空

示例:

media.off('imageChange', () => {
    // stop listening successfully
})

createAsset8+

createAsset(mediaType: MediaType, displayName: string, relativePath: string, callback: AsyncCallback<FileAsset>): void

创建媒体资源,使用callback方式返回结果。

需要权限:ohos.permission.READ_MEDIA, ohos.permission.WRITE_MEDIA

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

mediaType

​MediaType​

媒体类型

displayName

string

展示文件名

relativePath

string

文件保存路径,可以通过​​getPublicDirectory​​获取不同类型文件的保存路径

callback

AsyncCallback<​​FileAsset​​>

异步获取媒体数据FileAsset之后的回调

示例:

async function example() {
    // 使用Callback方式创建Image类型文件
    let mediaType = mediaLibrary.MediaType.IMAGE;
    let DIR_IMAGE = mediaLibrary.DirectoryType.DIR_IMAGE;
    const path = await media.getPublicDirectory(DIR_IMAGE);
    media.createAsset(mediaType, 'imageCallBack.jpg', path + 'myPicture/', (error, fileAsset) => {
        if (fileAsset != undefined) {
            console.info('createAsset successfully, message');
        } else {
            console.error('createAsset failed with error: ' + error);
        }
    });
}

createAsset8+

createAsset(mediaType: MediaType, displayName: string, relativePath: string): Promise<FileAsset>

创建媒体资源,使用Promise方式返回结果。

需要权限:ohos.permission.READ_MEDIA, ohos.permission.WRITE_MEDIA

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

mediaType

​MediaType​

媒体类型

displayName

string

展示文件名

relativePath

string

相对路径,可以通过getPublicDirectory获取不同类型媒体文件的一层目录的relative path

返回值

类型

说明

​FileAsset​

媒体数据FileAsset

示例:

async function example() {
    // 使用Promise方式创建Image类型文件
    let mediaType = mediaLibrary.MediaType.IMAGE;
    let DIR_IMAGE = mediaLibrary.DirectoryType.DIR_IMAGE;
    const path = await media.getPublicDirectory(DIR_IMAGE);
    media.createAsset(mediaType, 'imagePromise.jpg', path + 'myPicture/').then((fileAsset) => {
        console.info('createAsset successfully, message = ' + JSON.stringify(fileAsset));
    }).catch((error) => {
        console.error('createAsset failed with error: ' + error);
    });
}

getPublicDirectory8+

getPublicDirectory(type: DirectoryType, callback: AsyncCallback<string>): void

获取公共目录路径,使用callback方式返回结果。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

type

​DirectoryType​

公共目录类型

callback

AsyncCallback<string>

callback 返回公共目录路径

示例:

let DIR_CAMERA = mediaLibrary.DirectoryType.DIR_CAMERA;
media.getPublicDirectory(DIR_CAMERA, (error, dicResult) => {
    if (dicResult == 'Camera/') {
        console.info('getPublicDirectory DIR_CAMERA successfully');
    } else {
        console.error('getPublicDirectory DIR_CAMERA failed with error: ' + error);
    }
});

getPublicDirectory8+

getPublicDirectory(type: DirectoryType): Promise<string>

获取公共目录路径,使用Promise方式返回结果。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

type

​DirectoryType​

公共目录类型

返回值:

类型

说明

Promise<string>

返回公共目录路径

示例:

async function example() {
    let DIR_CAMERA = mediaLibrary.DirectoryType.DIR_CAMERA;
    media.getPublicDirectory(DIR_CAMERA).then((dicResult) => {
        if (dicResult == 'Camera/') {
            console.info('getPublicDirectory DIR_CAMERA successfully');
        } else {
            console.error('getPublicDirectory DIR_CAMERA failed');
        }
    }).catch((error) => {
        console.error('getPublicDirectory failed with error: ' + error);
    });
}

getAlbums7+

getAlbums(options: MediaFetchOptions, callback: AsyncCallback<Array<Album>>): void

获取相册列表,使用callback 方式返回结果。

需要权限:ohos.permission.READ_MEDIA

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数

参数名

类型

必填

说明

options

​MediaFetchOptions​

相册获取条件

callback

AsyncCallback<Array<​​Album​​>>

异步获取Album列表之后的回调

示例:

async function example() {
    let AlbumNoArgsfetchOp = {
        selections: '',
        selectionArgs: [],
    };
    media.getAlbums(AlbumNoArgsfetchOp, (error, albumList) => {
        if (albumList != undefined) {
            console.info('getAlbums successfully: ' + JSON.stringify(albumList));
        } else {
            console.error('getAlbums failed with error: ' + error);
        }
    })
}

getAlbums7+

getAlbums(options: MediaFetchOptions): Promise<Array<Album>>

获取相册列表,使用 promise 方式返回结果。

需要权限:ohos.permission.READ_MEDIA

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

options

​MediaFetchOptions​

相册获取条件

返回值:

类型

说明

Promise<Array<​​Album​​>>

返回Album列表

示例:

async function example() {
    let AlbumNoArgsfetchOp = {
        selections: '',
        selectionArgs: [],
    };
    media.getAlbums(AlbumNoArgsfetchOp).then((albumList) => {
        console.info('getAlbums successfully: ' + JSON.stringify(albumList));
    }).catch((error) => {
        console.error('getAlbums failed with error: ' + error);
    });
}

release8+

release(callback: AsyncCallback<void>): void

释放MediaLibrary实例。

当后续不需要使用MediaLibrary实例中的方法时调用。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

callback

AsyncCallback<void>

无返回值

示例:

media.release(() => {
    // do something
});

release8+

release(): Promise<void>

释放MediaLibrary实例。

当后续不需要使用MediaLibrary实例中的方法时调用。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

返回值:

类型

说明

Promise<void>

Promise实例,用于获取异步返回结果

示例:

media.release()

storeMediaAsset(deprecated)

storeMediaAsset(option: MediaAssetOption, callback: AsyncCallback<string>): void

保存媒体资源,以异步方法获取保存成功的URI,使用callback形式返回结果。

说明

从API version 6开始支持,从API version 9开始废弃。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

option

​MediaAssetOption​

媒体资源选项。

callback

AsyncCallback<string>

媒体资源保存回调,返回保存成功后得到的URI。

示例:

let option = {
    src : '/data/storage/el2/base/haps/entry/image.png',
    mimeType : 'image/*',
    relativePath : 'Pictures/'
};
mediaLibrary.getMediaLibrary().storeMediaAsset(option, (error, value) => {
    if (error) {
        console.error('storeMediaAsset failed with error: ' + error);
        return;
    }
    console.info('Media resources stored. ');
    // Obtain the URI that stores media resources.
});

storeMediaAsset(deprecated)

storeMediaAsset(option: MediaAssetOption): Promise<string>

保存媒体资源,以异步方法获取保存成功的URI,使用Promise形式返回结果。

说明

从API version 6开始支持,从API version 9开始废弃。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

option

​MediaAssetOption​

媒体资源选项。

返回值:

类型

说明

Promise<string>

Promise实例,用于异步获取保存成功后得到的URI。

示例:

let option = {
    src : '/data/storage/el2/base/haps/entry/image.png',
    mimeType : 'image/*',
    relativePath : 'Pictures/'
};
mediaLibrary.getMediaLibrary().storeMediaAsset(option).then((value) => {
    console.info('Media resources stored.');
    // Obtain the URI that stores media resources.
}).catch((error) => {
    console.error('storeMediaAsset failed with error: ' + error);
});

startImagePreview(deprecated)

startImagePreview(images: Array<string>, index: number, callback: AsyncCallback<void>): void

启动图片预览界面并限定预览开始显示的图片。可以预览指定序号的单张本地图片(datashare://),也可以预览列表中的所有网络图片(https://)。使用callback方式进行异步回调。

说明

从API Version 9开始废弃。建议使用​​Image组件​​替代。

Image组件,可用于本地图片和网络图片的渲染展示。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

images

Array<string>

预览的图片URI('https://','datashare://')列表。

index

number

开始显示的图片序号。

callback

AsyncCallback<void>

图片预览回调,失败时返回错误信息。

示例:

let images = [
    'datashare:///media/xxxx/2',
    'datashare:///media/xxxx/3'
];
/* 网络图片使用方式
let images = [
    'https://media.xxxx.com/image1.jpg',
    'https://media.xxxx.com/image2.jpg'
];
*/
let index = 1;
mediaLibrary.getMediaLibrary().startImagePreview(images, index, (error) => {
    if (error) {
        console.error('startImagePreview failed with error: ' + error);
        return;
    }
    console.info('Succeeded in previewing the images.');
});

startImagePreview(deprecated)

startImagePreview(images: Array<string>, callback: AsyncCallback<void>): void

启动图片预览界面,可以预览列表中首张本地图片(datashare://),也可以预览列表中的所有网络图片(https://)。使用callback方式进行异步回调。

说明

从API Version 9开始废弃。建议使用​​Image组件​​替代。

Image组件,可用于本地图片和网络图片的渲染展示。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

images

Array<string>

预览的图片URI('https://','datashare://')列表。

callback

AsyncCallback<void>

图片预览回调,失败时返回错误信息。

示例:

let images = [
    'datashare:///media/xxxx/2',
    'datashare:///media/xxxx/3'
];
/* 网络图片使用方式
let images = [
    'https://media.xxxx.com/image1.jpg',
    'https://media.xxxx.com/image2.jpg'
];
*/
mediaLibrary.getMediaLibrary().startImagePreview(images, (error) => {
    if (error) {
        console.error('startImagePreview failed with error: ' + error);
        return;
    }
    console.info('Succeeded in previewing the images.');
});

startImagePreview(deprecated)

startImagePreview(images: Array<string>, index?: number): Promise<void>

启动图片预览界面并限定预览开始显示的图片。可以预览指定序号的单张本地图片(datashare://),也可以预览列表中的所有网络图片(https://)。使用Promise方式进行异步回调。

说明

从API Version 9开始废弃。建议使用​​Image组件​​替代。

Image组件,可用于本地图片和网络图片的渲染展示。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

images

Array<string>

预览的图片URI('https://','datashare://')列表。

index

number

开始显示的图片序号,不选择时默认为0。

返回值:

类型

说明

Promise<void>

Promise实例,用于异步获取预览结果,失败时返回错误信息。

示例:

let images = [
    'datashare:///media/xxxx/2',
    'datashare:///media/xxxx/3'
];
/* 网络图片使用方式
let images = [
    'https://media.xxxx.com/image1.jpg',
    'https://media.xxxx.com/image2.jpg'
];
*/
let index = 1;
mediaLibrary.getMediaLibrary().startImagePreview(images, index).then(() => {
    console.info('Succeeded in previewing the images.');
}).catch((error) => {
    console.error('startImagePreview failed with error: ' + error);
});

startMediaSelect(deprecated)

startMediaSelect(option: MediaSelectOption, callback: AsyncCallback<Array<string>>): void

启动媒体选择界面,以异步方法获取选择的媒体URI列表,使用callback形式返回结果。

说明

从API Version 9开始废弃。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

option

​MediaSelectOption​

媒体选择选项。

callback

AsyncCallback<Array<string>>

媒体选择回调,返回选择的媒体URI(datashare://)列表。

示例:

let option : mediaLibrary.MediaSelectOption = {
    type : 'media',
    count : 2
};
mediaLibrary.getMediaLibrary().startMediaSelect(option, (error, value) => {
    if (error) {
        console.error('startMediaSelect failed with error: ' + error);
        return;
    }
    console.info('Media resources selected.');
    // Obtain the media selection value.
});

startMediaSelect(deprecated)

startMediaSelect(option: MediaSelectOption): Promise<Array<string>>

启动媒体选择界面,以异步方法获取选择的媒体URI列表,使用Promise形式返回结果。

说明

从API Version 9开始废弃。

系统能力:SystemCapability.Multimedia.MediaLibrary.Core

参数:

参数名

类型

必填

说明

option

​MediaSelectOption​

媒体选择选项。

返回值:

类型

说明

Promise<Array<string>>

Promise实例,用于异步获取选择的媒体URI(datashare://)列表。

示例:

let option : mediaLibrary.MediaSelectOption = {
    type : 'media',
    count : 2
};
mediaLibrary.getMediaLibrary().startMediaSelect(option).then((value) => {
    console.info('Media resources selected.');
    // Obtain the media selection value.
}).catch((error) => {
    console.error('startMediaSelect failed with error: ' + error);
});


文章转载自:​​https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/js-apis-medialibrary-0000001478061921-V3?catalogVersion=V3#ZH-CN_TOPIC_0000001478061921__导入模块​

已于2023-4-6 17:10:03修改
收藏
回复
举报
回复