存储服务

更新时间: 2024/09/18 11:27:21

网易云信即时通讯 SDK(NetEase IM SDK,以下简称 NIM SDK)提供存储服务,支持添加、查询自定义存储场景和文件上传。

本文介绍存储服务相关 API。

支持平台

Android iOS macOS/Windows Web/uni-app/小程序 HarmonyOS
✔️️ ✔️️ ✔️️ ✔️️ ✔️️

API 概览

API 说明 起始版本
addCustomStorageScene 添加自定义存储场景 v10.2.0(对应 HarmonyOS v0.5.0)
getStorageSceneList 获取存储场景列表 v10.2.0(对应 HarmonyOS v0.5.0)
createUploadFileTask 创建文件上传任务 v10.2.0(对应 HarmonyOS v0.5.0)
uploadFile 上传文件 v10.2.0(对应 HarmonyOS v0.5.0)
cancelUploadFile 取消文件上传 v10.2.0(对应 HarmonyOS v0.5.0)
downloadFile 下载文件
  • Android/iOS:v10.2.6
  • Windows/macOS:10.3.0
  • shortUrlToLong 短链接转长链接
  • Android/iOS/Web:v10.2.3
  • Windows/macOS:10.3.0
  • imageThumbUrl 生成图片缩略图链接
  • Android/iOS/Web:v10.2.6
  • Windows/macOS:10.3.0
  • HarmonyOS:v1.3.0
  • videoCoverUrl 生成视频封面图链接
  • Android/iOS/Web:v10.2.6
  • Windows/macOS:10.3.0
  • HarmonyOS:v1.3.0
  • downloadAttachment 下载消息附件。 v10.3.0
    getImageThumbUrl 获取图片消息中的缩略图链接。 v10.3.0
    getVideoCoverUrl 获取视频消息中的视频封面链接。 v10.3.0

    接口类

    V2NIMStorageService 类提供存储服务相关接口。

    addCustomStorageScene

    接口描述

    添加自定义存储场景。

    该方法为同步。

    参数说明

    Android
    JavaV2NIMStorageScene addCustomStorageScene(String sceneName, long expireTime);
    
    参数名称 类型 是否必填 说明
    sceneName String 自定义场景名
    expireTime long 过期时间(秒),0 表示永不过期。
    iOS
    Objective-C- (void)addCustomStorageScene:(NSString *)sceneName expireTime:(NSUInteger)expireTime;
    
    参数名称 类型 是否必填 说明
    sceneName NSString * 自定义场景名
    expireTime NSUInteger 过期时间(秒),0 表示永不过期。
    macOS/Windows
    C++virtual void addCustomStorageScene(nstd::string sceneName, uint64_t expireTime) = 0;
    
    参数名称 类型 是否必填 说明
    sceneName nstd::string 自定义场景名
    expireTime uint64_t 过期时间(秒),0 表示永不过期。
    Web/uni-app/小程序
    TypeScriptaddCustomStorageScene(sceneName: string, expireTime: number): V2NIMStorageScene
    
    参数名称 类型 是否必填 说明
    sceneName string 自定义场景名
    expireTime number 过期时间(秒),0 表示永不过期。
    HarmonyOS
    TypeScriptaddCustomStorageScene(sceneName: string, expireTime: number): V2NIMStorageScen
    
    参数名称 类型 是否必填 说明
    sceneName string 自定义场景名
    expireTime number 过期时间(秒),0 表示永不过期。

    示例代码

    Android
    JavaV2NIMStorageService v2StorageService = NIMClient.getService(V2NIMStorageService.class);
    v2StorageService.addCustomStorageScene(sceneName, expireTime);
    
    iOS
    Objective-C[[[NIMSDK sharedSDK] v2StorageService] addCustomStorageScene:@"scene_name" expireTime:1000];
    
    macOS/Windows
    C++storageService.addCustomStorageScene("customScene", 0); // never expire
    
    Web/uni-app/小程序
    TypeScriptnim.V2NIMStorageService.addCustomStorageScene("nim", 86400)
    
    HarmonyOS
    TypeScriptnim.storageService.addCustomStorageScene("nim", 86400)
    

    返回参数

    Android/Web/HarmonyOS
    iOS/macOS/Windows

    无。

    相关回调

    无。

    getStorageSceneList

    接口描述

    获取存储场景列表。

    该方法为同步。

    参数说明

    Android
    JavaList<V2NIMStorageScene> getStorageSceneList();
    
    iOS
    Objective-C- (NSArray<V2NIMStorageScene *> *)getStorageSceneList;
    
    macOS/Windows
    C++virtual nstd::vector<V2NIMStorageScene> getStorageSceneList() = 0;
    
    Web/uni-app/小程序
    TypeScriptgetStorageSceneList(): V2NIMStorageScene[]
    
    HarmonyOS
    TypeScriptgetStorageSceneList(): V2NIMStorageScene[]
    

    示例代码

    Android
    JavaV2NIMStorageService v2StorageService = NIMClient.getService(V2NIMStorageService.class);
    List<V2NIMStorageScene> storageSceneList = v2StorageService.getStorageSceneList();
    
    iOS
    Objective-C[[[NIMSDK sharedSDK] v2StorageService] getStorageSceneList];
    
    macOS/Windows
    C++auto sceneList = storageService.getStorageSceneList();
    
    Web/uni-app/小程序
    TypeScriptconst sceneList = nim.V2NIMStorageService.getStorageSceneList()
    
    HarmonyOS
    TypeScriptconst sceneList = nim.storageService.getStorageSceneList()
    

    返回参数

    V2NIMStorageScene 列表

    相关回调

    无。

    createUploadFileTask

    接口描述

    创建文件上传任务。

    该方法为同步。

    参数说明

    Android
    JavaV2NIMUploadFileTask createUploadFileTask(V2NIMUploadFileParams params);
    
    参数名称 类型 是否必填 说明
    params V2NIMUploadFileParams 文件上传参数
    iOS
    Objective-C- (V2NIMUploadFileTask *)createUploadFileTask:(V2NIMUploadFileParams *)fileParams;
    
    参数名称 类型 是否必填 说明
    params V2NIMUploadFileParams * 文件上传参数
    macOS/Windows
    C++virtual V2NIMUploadFileTask createUploadFileTask(V2NIMUploadFileParams fileParams) = 0;
    
    参数名称 类型 是否必填 说明
    params V2NIMUploadFileParams 文件上传参数
    Web/uni-app/小程序
    TypeScriptcreateUploadFileTask(fileParams: V2NIMUploadFileParams): V2NIMUploadFileTask
    
    参数名称 类型 是否必填 说明
    fileParams V2NIMUploadFileParams 文件上传参数
    HarmonyOS
    TypeScriptcreateUploadFileTask(fileParams: V2NIMUploadFileParams): V2NIMUploadFileTask
    
    参数名称 类型 是否必填 说明
    fileParams V2NIMUploadFileParams 文件上传参数

    示例代码

    Android
    JavaV2NIMStorageService v2StorageService = NIMClient.getService(V2NIMStorageService.class);
    V2NIMUploadFileParams params = new V2NIMUploadFileParams("filePath")
    V2NIMUploadFileTask uploadFileTask = v2StorageService.createUploadFileTask(params);
    
    iOS
    Objective-CV2NIMUploadFileParams *fileParams = [[V2NIMUploadFileParams alloc] init];
    fileParams.filePath = @"filePath";
    [[[NIMSDK sharedSDK] v2StorageService] createUploadFileTask:fileParams];
    
    macOS/Windows
    C++V2NIMUploadFileParams fileParams;
    fileParams.filePath = "~/test.txt";
    fileParams.name = "hello.txt";
    fileParams.scene = "customScene";
    auto uploadTask = storageService.createUploadFileTask(fileParams);
    
    Web/uni-app/小程序
    TypeScriptconst task = nim.V2NIMStorageService.createUploadFileTask({
        fileObj: document.getElementById('input-id').files[0]
    }})
    
    HarmonyOS
    TypeScriptconst params:V2NIMUploadFileParams = {
        filePath: '文件沙盒路径',
        sceneName: '场景名'
    } as V2NIMUploadFileParams
    
    const task = nim.storageService.createUploadFileTask(params)
    

    返回参数

    V2NIMUploadFileTask

    相关回调

    无。

    uploadFile

    接口描述

    上传文件。

    参数说明

    Android
    Javavoid uploadFile(V2NIMUploadFileTask fileTask, V2NIMSuccessCallback<String> success,
        V2NIMFailureCallback failure,
        V2NIMProgressCallback progress);
    
    参数名称 类型 是否必填 说明
    fileTask V2NIMUploadFileTask 文件上传任务对象
    success V2NIMSuccessCallback 上传成功回调,返回文件 URL 地址。
    failure V2NIMFailureCallback 上传失败回调,返回 错误码
    progress V2NIMProgressCallback 文件上传进度回调
    iOS
    Objective-C- (void)uploadFile:(V2NIMUploadFileTask *)fileTask
               success:(V2NIMFileUploadSuccess)success
               failure:(V2NIMFileUploadFailure)failure
              progress:(V2NIMFileUploadProgress)progress;
    
    参数名称 类型 是否必填 说明
    fileTask V2NIMUploadFileTask * 文件上传任务对象
    success V2NIMFileUploadSuccess 上传成功回调,可自定义设置。
    failure V2NIMFileUploadFailure 上传失败回调,可自定义设置。
    progress V2NIMProgressCallback 文件上传进度回调
    macOS/Windows
    C++virtual void uploadFile(V2NIMUploadFileTask fileTask,
        V2NIMSuccessCallback<nstd::string> success,
        V2NIMFailureCallback failure,
        V2NIMProgressCallback progress) = 0;
    
    参数名称 类型 是否必填 说明
    fileTask V2NIMUploadFileTask 文件上传任务对象
    success V2NIMSuccessCallback 上传成功回调,返回文件 URL 地址。
    failure V2NIMFailureCallback 上传失败回调,返回 错误码
    progress V2NIMProgressCallback 文件上传进度回调
    Web/uni-app/小程序
    TypeScriptuploadFile(fileTask: V2NIMUploadFileTask, progress: V2NIMProgressCallback): Promise<string>
    
    参数名称 类型 是否必填 说明
    fileTask V2NIMUploadFileTask 文件上传任务对象
    progress V2NIMProgressCallback 文件上传进度回调
    HarmonyOS
    TypeScriptuploadFile(fileTask: V2NIMUploadFileTask, progress: V2NIMProgressCallback): Promise<string>
    
    参数名称 类型 是否必填 说明
    fileTask V2NIMUploadFileTask 文件上传任务对象
    progress V2NIMProgressCallback 文件上传进度回调

    示例代码

    Android
    JavaV2NIMStorageService v2StorageService = NIMClient.getService(V2NIMStorageService.class);
    v2StorageService.uploadFile(task, (V2NIMSuccessCallback<String>) s -> {
        // 上传成功
    }, (V2NIMFailureCallback) error -> {
        // 上传失败
    }, (V2NIMProgressCallback) progress -> {
        // 上传进度
    });
    
    iOS
    Objective-C[[[NIMSDK sharedSDK] v2StorageService] uploadFile:fileTask success:^(NSString * _Nonnull urlString) {
            // 上传成功
        } failure:^(V2NIMError * _Nonnull error) {
            // 上传失败
        } progress:^(float progress) {
             // 上传进度
        }];
    
    macOS/Windows
    C++V2NIMUploadFileParams fileParams;
    fileParams.filePath = "~/test.txt";
    fileParams.name = "hello.txt";
    fileParams.scene = "customScene";
    auto uploadTask = storageService.createUploadFileTask(fileParams);
    storageService.uploadFile(
        uploadTask,
        [](nstd::string url) {
            // upload file succeeded
        },
        [](V2NIMError error) {
            // upload file failed, handle error
        },
        [](uint32_t progress) {
            // upload progress
        });
    
    Web/uni-app/小程序
    TypeScriptnim.V2NIMStorageService.uploadFile(task, function onProgress(progress) {
     console.log('uploadFile progress: ', progress)
    })
    
    HarmonyOS
    TypeScriptnim.storageService.uploadFile(task, function onProgress(progress) {
     console.log('uploadFile progress: ', progress)
    })
    

    返回参数

    Android/iOS/macOS/Windows

    无返回值。

    Web/uni-app/小程序/HarmonyOS

    Promise<string> 文件 URL 地址

    相关回调

    Android/macOS/Windows
    • 请求成功,返回 V2NIMSuccessCallback 回调,包含文件 URL 地址。
    • 请求失败,返回 V2NIMFailureCallback 回调,包含存储相关错误码。
    iOS
    • 请求成功,返回 V2NIMFileUploadSuccess 回调,可自定义设置。
    • 请求失败,返回 V2NIMFileUploadFailure 回调,可自定义设置。
    Web/uni-app/小程序/HarmonyOS

    无。

    cancelUploadFile

    接口描述

    取消文件上传。

    参数说明

    Android
    Javavoid cancelUploadFile(V2NIMUploadFileTask fileTask, V2NIMSuccessCallback<Void> success,
        V2NIMFailureCallback failure);
    
    参数名称 类型 是否必填 说明
    fileTask V2NIMUploadFileTask 需要取消的文件上传任务
    success V2NIMSuccessCallback 取消成功回调
    failure V2NIMFailureCallback 取消失败回调,返回 错误码
    iOS
    Objective-C- (void)cancelUploadFile:(V2NIMUploadFileTask *)fileTask
                     success:(V2NIMSuccessCallback)success
                     failure:(V2NIMFailureCallback)failure;
    
    参数名称 类型 是否必填 说明
    fileTask V2NIMUploadFileTask 需要取消的文件上传任务
    success V2NIMSuccessCallback 取消成功回调
    failure V2NIMFailureCallback 取消失败回调,返回 错误码
    macOS/Windows
    C++virtual void cancelUploadFile(V2NIMUploadFileTask fileTask, V2NIMSuccessCallback<void> success, V2NIMFailureCallback failure) = 0;
    
    参数名称 类型 是否必填 说明
    fileTask V2NIMUploadFileTask 需要取消的文件上传任务
    success V2NIMSuccessCallback 取消成功回调
    failure V2NIMFailureCallback 取消失败回调,返回 错误码
    Web/uni-app/小程序
    TypeScriptcancelUploadFile(fileTask: V2NIMUploadFileTask): Promise<void>
    
    参数名称 类型 是否必填 说明
    fileTask V2NIMUploadFileTask 需要取消的文件上传任务
    HarmonyOS
    TypeScriptcancelUploadFile(fileTask: V2NIMUploadFileTask): Promise<void>
    
    参数名称 类型 是否必填 说明
    fileTask V2NIMUploadFileTask 需要取消的文件上传任务

    示例代码

    Android
    JavaV2NIMStorageService v2StorageService = NIMClient.getService(V2NIMStorageService.class);
    v2StorageService.cancelUploadFile(task, (V2NIMSuccessCallback<Void>) s -> {
        // 取消成功
    }, (V2NIMFailureCallback) error -> {
        // 取消失败
    });
    
    iOS
    Objective-C[[[NIMSDK sharedSDK] v2StorageService] cancelUploadFile:fileTask success:^{
            //取消成功
        } failure:^(V2NIMError * _Nonnull error) {
            //取消失败
        }];
    
    macOS/Windows
    C++V2NIMUploadFileTask fileTask;
    // uploadFile
    // ...
    storageService.cancelUploadFile(
        fileTask,
        []() {
            // cancel upload file succeeded
        },
        [](V2NIMError error) {
            // cancel upload file failed, handle error
        });
    
    Web/uni-app/小程序
    TypeScriptnim.V2NIMStorageService.cancelUploadFile(task)
    
    HarmonyOS
    TypeScriptnim.storageService.cancelUploadFile(task)
    

    返回参数

    Android/iOS/macOS/Windows

    无返回值。

    Web/uni-app/小程序/HarmonyOS

    Promise<void>

    相关回调

    Android/iOS/macOS/Windows
    • 请求成功,返回 V2NIMSuccessCallback 回调。
    • 请求失败,返回 V2NIMFailureCallback 回调,包含存储相关错误码。
    Web/uni-app/小程序/HarmonyOS

    无。

    downloadFile

    接口描述

    下载文件。

    参数说明

    Android
    Javavoid downloadFile(String url, String filePath, V2NIMSuccessCallback<String> success,
        V2NIMFailureCallback failure, V2NIMProgressCallback progress);
    
    参数名称 类型 是否必填 说明
    url String 文件 URL 地址
    filePath String 文件本地存储路径
    success V2NIMSuccessCallback 下载成功回调
    failure V2NIMFailureCallback 下载失败回调,返回 错误码
    progress V2NIMProgressCallback 文件下载进度回调
    iOS
    Objective-C- (void)downloadFile:(NSString *)url
                filePath:(NSString *)filePath
                 success:(V2NIMSuccessCallback)success
                 failure:(V2NIMFailureCallback)failure
                progress:(nullable V2NIMProgressCallback)progress;
    
    参数名称 类型 是否必填 说明
    url NSString * 文件 URL 地址
    filePath NSString * 文件本地存储路径
    success V2NIMSuccessCallback 下载成功回调
    failure V2NIMFailureCallback 下载失败回调,返回 错误码
    progress V2NIMProgressCallback 文件下载进度回调
    Windows/macOS
    C++virtual void v2::V2NIMStorageService::downloadFile    ("   const nstd::string &     url,
                                                            const nstd::string &     savePath,
                                                            V2NIMSuccessCallback< nstd::string >     success,
                                                            V2NIMFailureCallback     failure,
                                                            V2NIMProgressCallback     progress )
    
    参数名称 类型 是否必填 说明
    url nstd::string 文件 URL 地址
    savePath nstd::string 文件本地存储路径
    success V2NIMSuccessCallback 下载成功回调
    failure V2NIMFailureCallback 下载失败回调,返回 错误码
    progress V2NIMProgressCallback 文件下载进度回调

    示例代码

    Android
    JavaString url = "https://www.abc.com/ttt.txt";
    // 设置文件存储位置
    String filePath = "xxx/ttt.txt";
    NIMClient.getService(V2NIMStorageService.class).downloadFile(url, filePath, new V2NIMSuccessCallback<String>() {
        @Override
        public void onSuccess(String filePath) {
            // 下载成功
        }
    }, new V2NIMFailureCallback() {
        @Override
        public void onFailure(V2NIMError error) {
            // 下载失败
        }
    }, new V2NIMProgressCallback() {
        @Override
        public void onProgress(int progress) {
            // 下载进度
        }
    });
    
    iOS
    Objective-C// 按需配置远程目录
    NSString *url = @"https://www.abc.com/ttt.txt";
    // 按需配置存储目录
    NSString *filePath = @"Document/ttt.txt";
    [[NIMSDK sharedSDK].v2StorageService downloadFile:url filePath:filePath success:^() {
        // 成功回调
    } failure:^(V2NIMError *error) {
        // 失败回调
    } progress:^(NSUInteger progress) {
        // 进度回调
    }];
    
    Windows/macOS
    C++storageService.downloadFile(
        "https://example.com/test.txt",
        "~/test.txt",
        [](const nstd::string& url) {
            // download file succeeded
        },
        [](V2NIMError error) {
            // download file failed, handle error
        },
        [](uint32_t progress) {
            // download progress
        });
    

    返回参数

    无。

    相关回调

    • 请求成功,返回 V2NIMSuccessCallback 回调。
    • 请求失败,返回 V2NIMFailureCallback 回调,包含存储相关错误码。

    shortUrlToLong

    接口描述

    短链接转长链接。

    参数说明

    Android
    Javavoid shortUrlToLong(String url, V2NIMSuccessCallback<String> success,
        V2NIMFailureCallback failure);
    
    参数名称 类型 是否必填 说明
    url String 文件 URL 地址
    success V2NIMSuccessCallback 链接转换成功成功回调
    failure V2NIMFailureCallback 链接转换成功失败回调,返回错误码
    iOS
    Objective-C- (void)shortUrlToLong:(NSString *)url
                   success:(V2NIMShortUrlToLongSuccess)success
                   failure:(V2NIMFailureCallback)failure;
    
    参数名称 类型 是否必填 说明
    url NSString * 文件 URL 地址
    success V2NIMShortUrlToLongSuccess 链接转换成功成功回调,可自定义设置。
    failure V2NIMFailureCallback 链接转换成功失败回调,返回错误码
    Windows/macOS
    C++virtual void v2::V2NIMStorageService::shortUrlToLong    ("   const nstd::string &     url,
                                                                V2NIMSuccessCallback< nstd::string >     success,
                                                                V2NIMFailureCallback     failure )
    
    参数名称 类型 是否必填 说明
    url nstd::string 文件 URL 地址
    success V2NIMSuccessCallback 链接转换成功成功回调
    failure V2NIMFailureCallback 链接转换成功失败回调,返回错误码
    Web/uni-app/小程序
    TypeScriptshortUrlToLong(url: string): Promise<string>
    
    参数名称 类型 是否必填 说明
    url string 文件 URL 地址

    示例代码

    Android
    JavaString shortUrl = "https://s.netease.im/safe/AAAAAAAAAAAAAAAAAAAAAAAAAAA?_im_url=1";
    NIMClient.getService(V2NIMStorageService.class).shortUrlToLong(shortUrl, new V2NIMSuccessCallback<String>() {
        @Override
        public void onSuccess(String longUrl) {
            // 转换成功
        }
    }, new V2NIMFailureCallback() {
        @Override
        public void onFailure(V2NIMError error) {
            // 转换失败
        }
    });
    
    iOS
    Objective-C// 按需传入短链
    NSString *shortUrl = @"https://s.netease.im/safe/AAAAAAAAAAAAAAAAAAAAAAAAAAA?_im_url=1";
    [[NIMSDK sharedSDK].v2StorageService shortUrlToLong:shortUrl success:^(NSString *url) {
        // 成功回调
    } failure:^(V2NIMError *error) {
        // 失败回调
    }];
    
    Windows/macOS
    C++storageService.shortUrlToLong("https://example.com/short?_im_url=1", [](nstd::string url) {
        // short url to long succeeded
    }, [](V2NIMError error) {
        // short url to long failed, handle error
    });
    
    Web/uni-app/小程序
    TypeScriptvar shortUrl = "https://s.netease.im/safe/AAAAAAAAAAAAAAAAAAAAAAAAAAA?_im_url=1";
    var originUrl = await nim.V2NIMStorageService.shortUrlToLong(shortUrl)
    

    返回参数

    Android/iOS/Windows/macOS

    无。

    Web/uni-app/小程序

    Promise<string>

    相关回调

    Android/Windows/macOS
    • 请求成功,返回 V2NIMSuccessCallback 回调。
    • 请求失败,返回 V2NIMFailureCallback 回调,包含存储相关错误码。
    iOS
    • 请求成功,返回 V2NIMShortUrlToLongSuccess 回调,可自定义设置。
    • 请求失败,返回 V2NIMFailureCallback 回调,包含存储相关错误码。
    Web/uni-app/小程序

    无。

    imageThumbUrl

    接口描述

    生成图片缩略图链接。

    参数说明

    Android
    Javapublic static String imageThumbUrl(String url,int thumbSize)
    
    参数名称 类型 是否必填 说明
    url String 原始图片 URL 地址
    thumbSize Integer 图片缩放的尺寸
    iOS
    Objective-C+ (NSString *)imageThumbUrl:(NSString *)url
                      thumbSize:(NSInteger)thumbSize;
    
    参数名称 类型 是否必填 说明
    url NSString * 原始图片 URL 地址
    thumbSize NSInteger 图片缩放的尺寸
    Windows/macOS
    C++nstd::string v2::V2NIMStorageUtil::imageThumbUrl    ("   const nstd::string &     url,
                                                            int32_t     thumbSize )
    
    参数名称 类型 是否必填 说明
    url nstd::string 原始图片 URL 地址
    thumbSize int32_t 图片缩放的尺寸
    Web/uni-app/小程序
    TypeScriptimageThumbUrl(url: string, thumbSize: number): string
    
    参数名称 类型 是否必填 说明
    url string 原始图片 URL 地址
    thumbSize number 图片缩放的尺寸
    HarmonyOS
    TypeScriptimageThumbUrl(url: string, thumbSize: number): string
    
    参数名称 类型 是否必填 说明
    url string 原始图片 URL 地址
    thumbSize number 图片缩放的尺寸

    示例代码

    Android
    JavaString url = "http://xxx.com/xxx.jpg";
    int thumbSize = 100;
    String imageThumbUrl = V2NIMStorageUtil.imageThumbUrl(url, thumbSize);
    
    iOS
    Objective-C- (void)imageThumbUrl
    {
        V2NIMMessage *message = nil; // message
        V2NIMMessageImageAttachment *attachment = nil; // image attachment
        if ([message.attachment isKindOfClass:V2NIMMessageImageAttachment.class]) {
            attachment = (V2NIMMessageImageAttachment *)(message.attachment);
        }
        if (attachment) {
            NSInteger size = 100; // screen size
            size *= UIScreen.mainScreen.scale;
            // keep aspect ratio and width or height > size
            NSString *thumbUrl = [V2NIMStorageUtil imageThumbUrl:attachment.url thumbSize:size];
        }
    }
    
    Windows/macOS
    C++auto thumbURL= V2NIMStorageUtil::imageThumbUrl("image_url", 100);
    
    Web/uni-app/小程序
    TypeScriptconst url = nim.V2NIMStorageUtil.imageThumbUrl("https://host/path", 80)
    
    HarmonyOS
    TypeScriptconst url = nim.storageUtil.imageThumbUrl("https://host/path", 80)
    

    返回参数

    thumbUrl:缩略图的 URL 地址。

    相关回调

    无。

    getImageThumbUrl

    接口描述

    获取图片消息中的图片缩略图链接。

    参数说明

    Android
    Javavoid getImageThumbUrl(V2NIMMessageAttachment attachment,
                        V2NIMSize thumbSize,
                        V2NIMSuccessCallback<V2NIMGetMediaResourceInfoResult> success,
                        V2NIMFailureCallback failure);
    
    参数名称 类型 是否必填 说明
    attachment V2NIMMessageAttachment 需要获取缩略图的附件对象。
    thumbSize V2NIMSize 要获取的缩略图大小。默认值为 {150,0},0 表示该维度不限制。
    内置默认值,不是在声明时指定的,而是运行时根据用户情况判断。
    success V2NIMSuccessCallback<V2NIMGetMediaResourceInfoResult> 获取缩略图成功回调,返回 URL 地址。
    failure V2NIMFailureCallback 获取缩略图失败回调,返回 错误码
    iOS
    Objective-C- (void)getImageThumbUrl:(V2NIMMessageAttachment *)attachment
                   thumbSize:(V2NIMSize *)thumbSize
                     success:(V2NIMGetImageThumbUrlSuccess)success
                     failure:(V2NIMFailureCallback)failure;
    
    参数名称 类型 是否必填 说明
    attachment V2NIMMessageAttachment 需要获取缩略图的附件对象。
    thumbSize V2NIMSize {150,0},0 表示该维度不限制。
    内置默认值,不是在声明时指定的,而是运行时根据用户情况判断
    要获取的缩略图大小。
    success V2NIMGetImageThumbUrlSuccess 获取缩略图成功回调,返回 URL 地址。
    failure V2NIMFailureCallback 获取缩略图失败回调,返回 错误码
    Windows/macOS
    C++virtual void v2::V2NIMStorageService::getImageThumbUrl    (
                    const nstd::shared_ptr< V2NIMMessageAttachment > &     attachment,
                    const nstd::optional< V2NIMSize > & thumbSize,
                    const V2NIMSuccessCallback< const V2NIMGetMediaResourceInfoResult & > & success,
                    const V2NIMFailureCallback &     failure
    )
    
    参数名称 类型 是否必填 说明
    attachment nstd::shared_ptr<V2NIMMessageAttachment> 需要获取缩略图的附件对象。
    thumbSize nstd::optional<V2NIMSize> 要获取的缩略图大小。默认值为 {150,0},0 表示该维度不限制。
    内置默认值,不是在声明时指定的,而是运行时根据用户情况判断。
    success V2NIMSuccessCallback< const V2NIMGetMediaResourceInfoResult &> 获取缩略图成功回调,返回 URL 地址。
    failure V2NIMFailureCallback 获取缩略图失败回调,返回 错误码
    Web/uni-app/小程序
    TypeScriptgetImageThumbUrl(attachment: V2NIMMessageAttachment, thumbSize: V2NIMSize): Promise<V2NIMGetMediaResourceInfoResult>
    
    参数名称 类型 是否必填 说明
    attachment V2NIMMessageAttachment 需要获取缩略图的附件对象。
    thumbSize V2NIMSize 要获取的缩略图大小。默认值为 {150,0},0 表示该维度不限制。
    内置默认值,不是在声明时指定的,而是运行时根据用户情况判断。

    示例代码

    Android
    Java// 从消息中获取附件,只能使用 V2NIMMessageImageAttachment
    V2NIMMessageAttachment attachment = message.getAttachment();
    // 指定图片大小。0 表示该维度不限制
    V2NIMSize thumbSize = new V2NIMSize();
    thumbSize.setWidth(100);
    thumbSize.setHeight(0);
    
    NIMClient.getService(V2NIMStorageService.class).getImageThumbUrl(attachment, thumbSize, s -> {
        // 获取成功
    }, f -> {
        // 获取失败
    });
    
    iOS
    Objective-C// 从消息中获取附件,只能使用 V2NIMMessageImageAttachment
    V2NIMMessageAttachment *attachment = message.attachment;
    // 指定图片大小。0 表示该维度不限制
    V2NIMSize *thumbSize = [[V2NIMSize alloc] initWithWidth:100 height:0];
    
    [[NIMSDK sharedSDK].v2StorageService getImageThumbUrl:attachment thumbSize:thumbSize success:^(V2NIMGetMediaResourceInfoResult *result) {
        // 获取成功
    } failure:^(V2NIMError *error) {
        // 获取失败
    }];
    
    Windows/macOS
    C++storageService.getImageThumbUrl(attachment, V2NIMSize(150, 150), [](const V2NIMGetMediaResourceInfoResult& result) {
            // get image thumb url succeeded
        }, [](V2NIMError error) {
            // get image thumb url failed, handle error
        });
    
    Web/uni-app/小程序
    TypeScript/**
       * 生成图片缩略链接
       *
       * ESM 模式时,需要动态引入 V2NIMStorageUtil 后使用:
       * NIM.registerService(V2NIMStorageUtil, 'V2NIMStorageUtil')
       *
       * 使用示例: nim.V2NIMStorageService.getImageThumbUrl(attachment, { width: 100, height: 100 })
       */
      getImageThumbUrl(attachment: V2NIMMessageAttachment, thumbSize: V2NIMSize): Promise<V2NIMGetMediaResourceInfoResult>
    

    返回参数

    Android/iOS/Windows/macOS

    无。

    Web/uni-app/小程序

    Promise<V2NIMGetMediaResourceInfoResult>

    相关回调

    Android/Windows/macOS
    • 请求成功,返回 V2NIMSuccessCallback<V2NIMGetMediaResourceInfoResult> 回调,包含附件下载路径。
    • 请求失败,返回 V2NIMFailureCallback 回调,包含存储服务相关错误码。
    iOS
    • 请求成功,返回 V2NIMGetImageThumbUrlSuccess 回调,包含附件下载路径。
    • 请求失败,返回 V2NIMFailureCallback 回调,包含存储服务相关错误码。
    Web/uni-app/小程序

    无。

    videoCoverUrl

    接口描述

    生成视频封面图链接。

    参数说明

    Android
    Javapublic static String videoCoverUrl(String url,int offset)
    
    参数名称 类型 是否必填 说明
    url String 原始视频 URL 地址
    offset Integer 指定视频的目标封面所在时间,即从第几秒开始取封面
    iOS
    Objective-C+ (NSString *)videoCoverUrl:(NSString *)url
                         offset:(NSInteger)offset;
    
    参数名称 类型 是否必填 说明
    url NSString * 原始视频 URL 地址
    offset NSInteger 指定视频的目标封面所在时间,即从第几秒开始取封面
    Windows/macOS
    C++nstd::string v2::V2NIMStorageUtil::videoCoverUrl ("const nstd::string & url,
                                                            int32_t offset,
                                                            int32_t thumbSize,
                                                            const nstd::string & type )
    
    参数名称 类型 是否必填 说明
    url nstd::string 原始视频 URL 地址
    offset int32_t 指定视频的目标封面所在时间,即从第几秒开始取封面
    thumbSize int32_t 视频封面的尺寸,单位像素
    type nstd::string 视频封面的类型,如 png,jpeg
    Web/uni-app/小程序
    TypeScriptvideoCoverUrl(url: string, offset: number): string
    
    参数名称 类型 是否必填 说明
    url string 原始视频 URL 地址
    offset number 指定视频的目标封面所在时间,即从第几秒开始取封面
    HarmonyOS
    TypeScriptvideoCoverUrl(url: string, offset: number): string
    
    参数名称 类型 是否必填 说明
    url string 原始视频 URL 地址
    offset number 指定视频的目标封面所在时间,即从第几秒开始取封面

    示例代码

    Android
    JavaString url = "http://xxx.com/xxx.jpg";
    int offset = 0;
    String videoCoverUrl = V2NIMStorageUtil.videoCoverUrl(url, offset);
    
    iOS
    Objective-C- (void)videoCoverUrl
    {
        V2NIMMessage *message = nil; // message
        V2NIMMessageVideoAttachment *attachment = nil; // video attachment
        if ([message.attachment isKindOfClass:V2NIMMessageVideoAttachment.class]) {
            attachment = (V2NIMMessageVideoAttachment *)(message.attachment);
        }
        if (attachment) {
            NSInteger offset = 0; // start of video
            NSString *coverUrl = [V2NIMStorageUtil videoCoverUrl:attachment.url offset:offset];
        }
    }
    
    Windows/macOS
    C++auto coverURL = V2NIMStorageUtil::videoCoverUrl("video_url", 0, 150, "png");
    
    Web/uni-app/小程序
    TypeScriptconst url = nim.V2NIMStorageUtil.videoCoverUrl("https://host/path", 0)
    
    HarmonyOS
    TypeScriptconst url = nim.storageUtil.videoCoverUrl("https://host/path", 0)
    

    返回参数

    coverUrl:封面图的 URL 地址。

    相关回调

    无。

    getVideoCoverUrl

    接口描述

    获取视频消息中的视频封面链接。

    参数说明

    Android
    Javavoid getVideoCoverUrl(V2NIMMessageAttachment attachment,
                          V2NIMSize thumbSize,
                          V2NIMSuccessCallback<V2NIMGetMediaResourceInfoResult> success,
                          V2NIMFailureCallback failure);
    
    参数名称 类型 是否必填 说明
    attachment V2NIMMessageAttachment 需要获取视频封面的附件对象。
    thumbSize V2NIMSize 要获取的视频封面大小。
    默认值为 {150,100},内置默认值不是在声明时指定的,而是运行时根据用户情况判断.
    success V2NIMSuccessCallback<V2NIMGetMediaResourceInfoResult> 获取视频封面成功回调,返回 URL 地址。
    failure V2NIMFailureCallback 获取视频封面失败回调,返回 错误码
    iOS
    Objective-C- (void)getVideoCoverUrl:(V2NIMMessageAttachment *)attachment
                   thumbSize:(V2NIMSize *)thumbSize
                     success:(V2NIMGetVideoCoverUrlSuccess)success
                     failure:(V2NIMFailureCallback)failure;
    
    参数名称 类型 是否必填 说明
    attachment V2NIMMessageAttachment 需要获取视频封面的附件对象。
    thumbSize V2NIMSize 要获取的视频封面大小。
    默认值为 {150,100},内置默认值不是在声明时指定的,而是运行时根据用户情况判断.
    success V2NIMGetVideoCoverUrlSuccess 获取视频封面成功回调,返回 URL 地址。
    failure V2NIMFailureCallback 获取视频封面失败回调,返回 错误码
    Windows/macOS
    C++virtual void v2::V2NIMStorageService::getVideoCoverUrl ("const nstd::shared_ptr< V2NIMMessageAttachment > & attachment,
    const nstd::optional< V2NIMSize > & thumbSize,
    const V2NIMSuccessCallback< const V2NIMGetMediaResourceInfoResult & > & success,
    const V2NIMFailureCallback & failure
    )
    
    参数名称 类型 是否必填 说明
    attachment nstd::shared_ptr<V2NIMMessageAttachment> 需要获取视频封面的附件对象。
    thumbSize nstd::optional V2NIMSize> 要获取的视频封面大小。
    默认值为 {150,100},内置默认值不是在声明时指定的,而是运行时根据用户情况判断.
    success V2NIMSuccessCallback< constV2NIMGetMediaResourceInfoResult &> 获取视频封面成功回调,返回 URL 地址。
    failure V2NIMFailureCallback 获取视频封面失败回调,返回 错误码
    Web/uni-app/小程序
    TypeScriptgetVideoCoverUrl(attachment: V2NIMMessageAttachment, thumbSize: V2NIMSize): Promise<V2NIMGetMediaResourceInfoResult>
    
    参数名称 类型 是否必填 说明
    attachment V2NIMMessageAttachment 需要获取视频封面的附件对象。
    thumbSize V2NIMSize 要获取的视频封面大小。
    默认值为 {150,100},内置默认值不是在声明时指定的,而是运行时根据用户情况判断.

    示例代码

    Android
    Java// 从消息中获取附件,只能使用 V2NIMMessageVideoAttachment
    V2NIMMessageAttachment attachment = message.getAttachment();
    // 指定图片大小。0 表示该维度不限制
    V2NIMSize thumbSize = new V2NIMSize();
    thumbSize.setWidth(100);
    thumbSize.setHeight(0);
    
    NIMClient.getService(V2NIMStorageService.class).getVideoCoverUrl(attachment, thumbSize, s -> {
        // 获取成功
    }, f -> {
        // 获取失败
    });
    
    iOS
    Objective-C// 从消息中获取附件,只能使用 V2NIMMessageVideoAttachment
    V2NIMMessageAttachment *attachment = message.attachment;
    // 指定图片大小。0 表示该维度不限制
    V2NIMSize *thumbSize = [[V2NIMSize alloc] initWithWidth:100 height:0];
    
    [[NIMSDK sharedSDK].v2StorageService getVideoCoverUrl:attachment thumbSize:thumbSize success:^(V2NIMGetMediaResourceInfoResult *result) {
        // 获取成功
    } failure:^(V2NIMError *error) {
        // 获取失败
    }];
    
    Windows/macOS
    C++storageService.getVideoCoverUrl(attachment, V2NIMSize(150, 150), [](const V2NIMGetMediaResourceInfoResult& result) {
           // get video cover url succeeded
       }, [](V2NIMError error) {
           // get video cover url failed, handle error
       });
    
    Web/uni-app/小程序
    TypeScript /**
       * 生成视频封面图链接
       *
       * ESM 模式时,需要动态引入 V2NIMStorageUtil 后使用:
       * NIM.registerService(V2NIMStorageUtil, 'V2NIMStorageUtil')
       *
       * 使用示例: nim.V2NIMStorageService.getVideoCoverUrl(attachment, { width: 100, height: 100 })
       */
      getVideoCoverUrl(attachment: V2NIMMessageAttachment, thumbSize: V2NIMSize): Promise<V2NIMGetMediaResourceInfoResult>
    

    返回参数

    Android/iOS/Windows/macOS

    无。

    Web/uni-app/小程序

    Promise<V2NIMGetMediaResourceInfoResult>

    相关回调

    Android/Windows/macOS
    • 请求成功,返回 V2NIMSuccessCallback<V2NIMGetMediaResourceInfoResult> 回调,包含附件下载路径。
    • 请求失败,返回 V2NIMFailureCallback 回调,包含存储服务相关错误码。
    iOS
    • 请求成功,返回 V2NIMGetVideoCoverUrlSuccess 回调,包含附件下载路径。
    • 请求失败,返回 V2NIMFailureCallback 回调,包含存储服务相关错误码。
    Web/uni-app/小程序

    无。

    downloadAttachment

    接口描述

    下载消息附件。

    若附件已经下载成功,则直接回调下载成功,返回下载路径(path)。

    下载路径规则如下:

    • 若用户指定下载路径(downloadParam.saveAs),则始终以用户指定的为准。
    • 若用户 未指定 下载路径,但附件(attachment)中有路径(path)信息,则以 attachment.path 为准。
    • 若用户 未指定 下载路径,且附件(attachment)为空,则使用用户缓存目录。

    参数说明

    Android
    Java/**
     * 下载消息附件
     *
     * @param downloadParam 下载参数
     * @param success       下载消息附件成功回调
     * @param failure       下载消息附件失败回调
     * @param progress      下载消息附件进度回调
     */
    void downloadAttachment(V2NIMDownloadMessageAttachmentParams downloadParam,
                            V2NIMSuccessCallback<String> success,
                            V2NIMFailureCallback failure,
                            V2NIMProgressCallback progress);
    
    参数名称 类型 是否必填 说明
    downloadParam V2NIMDownloadMessageAttachmentParams 下载附件的配置参数。
    success V2NIMSuccessCallback<String> 下载消息附件成功回调。
    failure V2NIMFailureCallback 下载消息附件失败回调,返回 错误码
    progress V2NIMProgressCallback 下载消息附件进度回调。
    iOS
    Objective-C- (void) downloadAttachment:    (V2NIMDownloadMessageAttachmentParams *)     downloadParam
                        success:        (V2NIMDownloadAttachmentSuccess)     success
                        failure:        (V2NIMFailureCallback)     failure
                       progress:        (nullable V2NIMProgressCallback)     progress
    
    参数名称 类型 是否必填 说明
    downloadParam V2NIMDownloadMessageAttachmentParams 下载附件的配置参数。
    success V2NIMDownloadAttachmentSuccess 下载消息附件成功回调,可自定义。
    failure V2NIMFailureCallback 下载消息附件失败回调,返回 错误码
    progress V2NIMProgressCallback 下载消息附件进度回调。
    Windows/macOS
    C++virtual void v2::V2NIMStorageService::downloadAttachment(const V2NIMDownloadMessageAttachmentParams & downloadParam,
                                                             const V2NIMSuccessCallback< const nstd::string & > & success,
                                                             const V2NIMFailureCallback & failure,
                                                             const V2NIMProgressCallback & progress
    )
    
    参数名称 类型 是否必填 说明
    downloadParam V2NIMDownloadMessageAttachmentParams 下载附件的配置参数。
    success V2NIMSuccessCallback< const nstd::string & > 下载消息附件成功回调。
    failure V2NIMFailureCallback 下载消息附件失败回调,返回 错误码
    progress V2NIMProgressCallback 下载消息附件进度回调。

    示例代码

    Android
    Java// 从消息中获取附件
    // 只有 V2NIMMessageFileAttachment 及其子类可以用于下载原始资源
    // 只有 V2NIMMessageImageAttachment 可以用于下载缩略图
    // 只有 V2NIMMessageVideoAttachment 可以用于下载视频封面
    V2NIMMessageAttachment attachment = message.getAttachment();
    // 下载缩略图。
    // 下载原始资源使用 V2NIM_DOWNLOAD_ATTACHMENT_TYPE_SOURCE、下载视频封面使用 V2NIM_DOWNLOAD_ATTACHMENT_TYPE_VIDEO_COVER
    V2NIMDownloadAttachmentType type = V2NIMDownloadAttachmentType.V2NIM_DOWNLOAD_ATTACHMENT_TYPE_THUMBNAIL;
    // 下载缩略图或者视频封面时,指定图片大小。0 表示该维度不限制
    V2NIMSize thumbSize = new V2NIMSize();
    thumbSize.setWidth(100);
    thumbSize.setHeight(0);
    // 填写对应消息的端侧 ID,使得下载完成后替换附件中的路径
    String messageClientId = message.getMessageClientId();
    // 指定文件的存储路径
    String saveAs = "path/to/save";
    
    V2NIMDownloadMessageAttachmentParams downloadParam = new V2NIMDownloadMessageAttachmentParams.V2NIMDownloadMessageAttachmentParamsBuilder(attachment)
            .type(type)
            .thumbSize(thumbSize)
            .messageClientId(messageClientId)
            .saveAs(saveAs).build();
    NIMClient.getService(V2NIMStorageService.class).downloadAttachment(downloadParam, s -> {
        // 下载成功
    }, f -> {
        // 下载失败
    }, progress -> {
        // 下载进度变更
    });
    
    iOS
    Objective-C// 从消息中获取附件
    // 只有 V2NIMMessageFileAttachment 及其子类可以用于下载原始资源
    // 只有 V2NIMMessageImageAttachment 可以用于下载缩略图
    // 只有 V2NIMMessageVideoAttachment 可以用于下载视频封面
    V2NIMMessageAttachment *attachment = message.attachment;
    V2NIMDownloadMessageAttachmentParams *downloadParams = [[V2NIMDownloadMessageAttachmentParams alloc] initWithAttachment:attachment];
    // 下载缩略图。
    // 下载原始资源使用 V2NIM_DOWNLOAD_ATTACHMENT_TYPE_SOURCE、下载视频封面使用 V2NIM_DOWNLOAD_ATTACHMENT_TYPE_VIDEO_COVER
    downloadParams.type = V2NIM_DOWNLOAD_ATTACHMENT_TYPE_THUMBNAIL;
    // 下载缩略图或者视频封面时,指定图片大小。0 表示该维度不限制
    downloadParams.thumbSize = [[V2NIMSize alloc] initWithWidth:100 height:0];
    // 填写对应消息的端侧 ID,使得下载完成后替换附件中的路径
    downloadParams.messageClientId = message.messageClientId;
    // 指定文件的存储路径
    downloadParams.saveAs = @"path/to/save";
    
    [[NIMSDK sharedSDK].v2StorageService downloadAttachment:attachment success:^(NSString *filePath) {
        // 下载成功
    } failure:^(V2NIMError *error) {
        // 下载失败
    } progress:^(NSUInteger progress) {
        // 下载进度变更
    }];
    
    Windows/macOS
    C++V2NIMDownloadMessageAttachmentParams downloadParam;
    downloadParam.attachment = attachment;
    downloadParam.type = V2NIM_DOWNLOAD_ATTACHMENT_TYPE_SOURCE;
    storageService.downloadAttachment(
        downloadParam,
        [](const nstd::string& path) {
            // download attachment succeeded
        },
        [](V2NIMError error) {
            // download attachment failed, handle error
        },
        [](uint32_t progress) {
            // download progress
        });
    

    返回参数

    无。

    相关回调

    Android/Windows/macOS
    • 请求成功,返回 V2NIMSuccessCallback 回调,包含附件下载路径。
    • 请求失败,返回 V2NIMFailureCallback 回调,包含存储服务相关错误码。
    • 返回 V2NIMProgressCallback 回调,包含附件下载进度。
    iOS
    • 请求成功,返回 V2NIMDownloadAttachmentSuccess 回调,包含附件下载路径。
    • 请求失败,返回 V2NIMFailureCallback 回调,包含存储服务相关错误码。
    • 返回 V2NIMProgressCallback 回调,包含附件下载进度。
    此文档是否对你有帮助?
    有帮助
    去反馈
    • 支持平台
    • API 概览
    • 接口类
    • addCustomStorageScene
    • getStorageSceneList
    • createUploadFileTask
    • uploadFile
    • cancelUploadFile
    • downloadFile
    • shortUrlToLong
    • imageThumbUrl
    • getImageThumbUrl
    • videoCoverUrl
    • getVideoCoverUrl
    • downloadAttachment