跳到主要内容

下载媒体消息文件

IMLib SDK 提供了对媒体消息中的多媒体文件进行下载的功能。

媒体消息中的媒体文件

消息 RCMessage 对象的 content 属性如果是 RCMediaMessageContent 类型的,其中可能携带了媒体文件的远端存储地址。IMLib SDK 内置的媒体消息类型如下:

在收到此类消息时,您可以使用 downloadMediaMessage 下载其中的媒体文件。

下载媒体消息中的媒体文件

提示
  • SDK 版本 从 5.6.6 开始,提供传入 RCMessage 下载媒体文件的方法,同时废弃传入消息 messageId 下载媒体文件的方法。
  • 下载媒体文件至本地后,消息内容体 RCMediaMessageContent 中的媒体文件本地路径 localPath 会被更新。

接口参数

Objective C
/// - Since: 5.6.4
- (void)downloadMediaMessage:(RCMessage *)message
progressBlock:(nullable void (^)(int progress))progressBlock
successBlock:(nullable void (^)(NSString *mediaPath))successBlock
errorBlock:(nullable void (^)(RCErrorCode errorCode))errorBlock
cancelBlock:(nullable void (^)(void))cancelBlock;

参数说明

参数类型说明
messageRCMessage消息对象。
progressBlockBlock当前的下载进度的回调,返回 int 类型的下载进度,范围 [0, 100]。
successBlockBlock下载消息成功的回调,返回 NSString 类型的本地路径,同时消息内容体中的 localPath 会被更新为返回的 mediaPath
errorBlockBlock下载消息失败的回调,返回错误码 RCErrorCode
cancelBlockBlock取消下载的回调。

示例代码

SDK 版本 ≧ 5.6.6)下载消息中的媒体文件请传入 RCMessage 对象:

Objective C
[[RCCoreClient sharedCoreClient] downloadMediaMessage:message
progressBlock:^(int progress) {
// Update UI with download progress
}
successBlock:^(NSString *mediaPath) {
// Handle successful download
}
errorBlock:^(RCErrorCode errorCode) {
// Handle download error
}
cancelBlock:^{
// Handle download cancellation
}];

SDK 版本 < 5.6.6)下载消息中的媒体文件请传入 RCMessage 对象中的 messageId 属性的值:

Objective C
[[RCCoreClient sharedCoreClient] downloadMediaMessage:messageId
progress:^(int progress) { }
success:^(NSString *mediaPath) { }
error:^(RCErrorCode errorCode) { }
cancel:^{ }];

暂停下载媒体消息中的媒体文件

提示

暂停下载功能仅在 5.6.6 及之后版本支持。

您在下载媒体文件的过程中可以暂停下载。如需恢复下载,需重新调用下载方法,下载支持断点续传。

示例代码

Objective C
[[RCCoreClient sharedCoreClient] pauseDownloadMediaMessage:message
successBlock:^{
// Handle pause success
}
errorBlock:^(RCErrorCode errorCode) {
// Handle pause error
}];

取消下载媒体消息中的媒体文件

提示

IMLib SDK 版本 从 5.6.6 开始,提供异步方法,原同步方法废弃。

SDK 版本 ≧ 5.6.6)异步取消下载媒体消息中的媒体文件。如果 RCErrorCode-3/OPERATION_MEDIA_NOT_FOUND,表示下载任务已经结束。

示例代码

Objective C
[[RCCoreClient sharedCoreClient] cancelDownloadMediaMessage:message
successBlock:^{
// Handle cancellation success
}
errorBlock:^(RCErrorCode errorCode) {
// Handle cancellation error
}];

SDK 版本 < 5.6.6)同步取消下载媒体消息中的媒体文件。返回 YES 表示取消成功。返回 NO 表示取消失败,即已经下载完成或者消息不存在。

Objective C
BOOL cancelResult = [[RCCoreClient sharedCoreClient] cancelDownloadMediaMessage:messageId];

下载网络媒体文件

IMLib SDK 提供了一个媒体文件下载器,可通过网络 URL 地址下载文件,不会操作消息体。

通过 URL 下载网络媒体文件

您可以使用 downloadMediaFile:mediaUrl:progress:success:error:cancel: 方法通过媒体文件远端 URL 下载文件,该方法不会操作消息体。返回的 mediaPath 会包含入参中指定的媒体文件名。

接口原型

Objective C
- (void)downloadMediaFile:(NSString *)fileName
mediaUrl:(NSString *)mediaUrl
progress:(nullable void (^)(int progress))progressBlock
success:(nullable void (^)(NSString *mediaPath))successBlock
error:(nullable void (^)(RCErrorCode errorCode))errorBlock
cancel:(nullable void (^)(void))cancelBlock;

参数说明

参数类型说明
fileNamemediaUrl指定的文件名称,必须指定文件后缀,例如 rongCloud.mov
mediaUrlNSString需要下载的媒体文件远端 URL。
progressBlockBlock当前的下载进度的回调,返回 int 类型的下载进度,范围 [0, 100]。
successBlockBlock下载消息成功的回调,返回 NSString 类型的本地路径。
errorBlockBlock下载消息失败的回调,返回错误码 RCErrorCode
cancelBlockBlock取消下载的回调。

示例代码

Objective C
[[RCCoreClient sharedCoreClient] downloadMediaFile:@"filename.png"
mediaUrl:@"http://remote.url"
progress:^(int progress) { }
success:^(NSString *mediaPath) { }
error:^(RCErrorCode errorCode) { }
cancel:^{ } ];

您可以使用 downloadMediaFile:targetId:mediaType:mediaUrl:progress:success:error:cancel: 方法通过图片的网络 URL 下载图片。IMLib SDK 会通过拼接输入参数中的会话类型、会话 targetId、媒体类型生成文件名,并在 mediaPath 中返回。

提示

该方法仅支持下载图片。

接口原型

Objective C
- (void)downloadMediaFile:(RCConversationType)conversationType
targetId:(NSString *)targetId
mediaType:(RCMediaType)mediaType
mediaUrl:(NSString *)mediaUrl
progress:(nullable void (^)(int progress))progressBlock
success:(nullable void (^)(NSString *mediaPath))successBlock
error:(nullable void (^)(RCErrorCode errorCode))errorBlock
cancel:(nullable void (^)(void))cancelBlock;

参数说明

参数类型说明
conversationTypeRCConversationType会话类型
targetIdNSString会话 targetId
mediaTypeRCMediaType多媒体类型,该方法仅支持下载图片(MediaType_IMAGE)。
mediaUrlNSString图片的远端 URL。
progressBlockBlock当前的下载进度的回调,返回 int 类型的下载进度,范围 [0, 100]。
successBlockBlock下载消息成功的回调,返回 NSString 类型的本地路径。
errorBlockBlock下载消息失败的回调,返回错误码 RCErrorCode
cancelBlockBlock取消下载的回调。

示例代码

Objective C
[[RCCoreClient sharedCoreClient] downloadMediaFile:ConversationType_GROUP
targetId:@"targetId"
mediaType:MediaType_IMAGE
mediaUrl:@"remoteurl"
progress:^(int progress) { }
success:^(NSString *mediaPath) { }
error:^(RCErrorCode errorCode) { }
cancel:^{ }];

暂停下载网络媒体文件

提示

暂停下载功能仅在 5.6.6 及之后版本支持。

您在下载媒体文件的过程中可以暂停下载。如需恢复下载,需重新调用下载方法,下载支持断点续传。

示例代码

Objective C
[[RCCoreClient sharedCoreClient] pauseDownloadMediaUrl:mediaUrl
successBlock:^{
// Handle pause success
}
errorBlock:^(RCErrorCode errorCode) {
// Handle pause error
}];

取消下载网络媒体文件

提示

IMlib SDK 版本 从 5.6.6 开始,提供异步取消下载方法,原同步方法废弃。

示例代码

SDK 版本 ≧ 5.6.6)异步取消下载网络媒体文件。如果 RCErrorCode-3/OPERATION_MEDIA_NOT_FOUND,表示下载任务已经结束。

Objective C
[[RCCoreClient sharedCoreClient] cancelDownloadMediaUrl:mediaUrl
successBlock:^{
// Handle cancellation success
}
errorBlock:^(RCErrorCode errorCode) {
// Handle cancellation error
}];

SDK 版本 < 5.6.6)同步取消下载网络媒体文件。返回 YES 表示取消成功。返回 NO 表示取消失败,即已经下载完成或者消息不存在。

Objective C
BOOL cancelResult = [[RCCoreClient sharedCoreClient] cancelDownloadMediaUrl:@"remoteurl"];