下载媒体消息文件
IMLib SDK 提供了对媒体消息中的多媒体文件进行下载的功能。
媒体消息中的媒体文件
消息 RCMessage 对象的 content 属性如果是 RCMediaMessageContent 类型的,其中可能携带了媒体文件的远端存储地址。IMLib SDK 内置的媒体消息类型如下:
- RCFileMessage:文件消息内容
 - RCImageMessage:图片消息内容
 - RCGIFMessage:GIF 消息内容
 - RCHQVoiceMessage:高清语音消息
 - RCSightMessage:小视频消息内容
 
在收到此类消息时,您可以使用 downloadMediaMessage 下载其中的媒体文件。
下载媒体消息中的媒体文件
- SDK 版本 从 5.6.6 开始,提供传入 RCMessage 下载媒体文件的方法,同时废弃传入消息 messageId 下载媒体文件的方法。
 - 下载媒体文件至本地后,消息内容体 
RCMediaMessageContent中的媒体文件本地路径localPath会被更新。 
接口参数
/// - 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;
参数说明
| 参数 | 类型 | 说明 | 
|---|---|---|
| message | RCMessage | 消息对象。 | 
| progressBlock | Block | 当前的下载进度的回调,返回 int 类型的下载进度,范围 [0, 100]。 | 
| successBlock | Block | 下载消息成功的回调,返回 NSString 类型的本地路径,同时消息内容体中的 localPath 会被更新为返回的 mediaPath。 | 
| errorBlock | Block | 下载消息失败的回调,返回错误码 RCErrorCode。 | 
| cancelBlock | Block | 取消下载的回调。 | 
示例代码
(SDK 版本 ≧ 5.6.6)下载消息中的媒体文件请传入 RCMessage 对象:
[[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 属性的值:
[[RCCoreClient sharedCoreClient] downloadMediaMessage:messageId
                                             progress:^(int progress) { }
                                              success:^(NSString *mediaPath) { }
                                                error:^(RCErrorCode errorCode) { }
                                               cancel:^{ }];
暂停下载媒体消息中的媒体文件
暂停下载功能仅在 5.6.6 及之后版本支持。
您在下载媒体文件的过程中可以暂停下载。如需恢复下载,需重新调用下载方法,下载支持断点续传。
示例代码
[[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,表示下载任务已经结束。
示例代码
[[RCCoreClient sharedCoreClient] cancelDownloadMediaMessage:message
                                             successBlock:^{
                                                 // Handle cancellation success
                                             }
                                               errorBlock:^(RCErrorCode errorCode) {
                                                   // Handle cancellation error
                                               }];
(SDK 版本 < 5.6.6)同步取消下载媒体消息中的媒体文件。返回 YES 表示取消成功。返回 NO 表示取消失败,即已经下载完成或者消息不存在。
BOOL cancelResult = [[RCCoreClient sharedCoreClient] cancelDownloadMediaMessage:messageId];
下载网络媒体文件
IMLib SDK 提供了一个媒体文件下载器,可通过网络 URL 地址下载文件,不会操作消息体。
通过 URL 下载网络媒体文件
您可以使用 downloadMediaFile:mediaUrl:progress:success:error:cancel: 方法通过媒体文件远端 URL 下载文件,该方法不会操作消息体。返回的 mediaPath 会包含入参中指定的媒体文件名。
接口原型
- (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;
参数说明
| 参数 | 类型 | 说明 | 
|---|---|---|
| fileName | mediaUrl | 指定的文件名称,必须指定文件后缀,例如 rongCloud.mov。 | 
| mediaUrl | NSString | 需要下载的媒体文件远端 URL。 | 
| progressBlock | Block | 当前的下载进度的回调,返回 int 类型的下载进度,范围 [0, 100]。 | 
| successBlock | Block | 下载消息成功的回调,返回 NSString 类型的本地路径。 | 
| errorBlock | Block | 下载消息失败的回调,返回错误码 RCErrorCode。 | 
| cancelBlock | Block | 取消下载的回调。 | 
示例代码
[[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 中 返回。
该方法仅支持下载图片。
接口原型
- (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;
参数说明
| 参数 | 类型 | 说明 | 
|---|---|---|
| conversationType | RCConversationType | 会话类型 | 
| targetId | NSString | 会话 targetId | 
| mediaType | RCMediaType | 多媒体类型,该方法仅支持下载图片(MediaType_IMAGE)。 | 
| mediaUrl | NSString | 图片的远端 URL。 | 
| progressBlock | Block | 当前的下载进度的回调,返回 int 类型的下载进度,范围 [0, 100]。 | 
| successBlock | Block | 下载消息成功的回调,返回 NSString 类型的本地路径。 | 
| errorBlock | Block | 下载消息失败的回调,返回错误码 RCErrorCode。 | 
| cancelBlock | Block | 取消下载的回调。 | 
示例代码
[[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 及之后版本支持。
您在下载媒体文件的过程中可以暂停下载。如需恢复下载,需重新调用下载方法,下载支持断点续传。
示例代码
[[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,表示下载任务已经结束。
[[RCCoreClient sharedCoreClient] cancelDownloadMediaUrl:mediaUrl
                                          successBlock:^{
                                              // Handle cancellation success
                                          }
                                            errorBlock:^(RCErrorCode errorCode) {
                                                // Handle cancellation error
                                            }];
(SDK 版本 < 5.6.6)同步取消下载网络媒体文件。返回 YES 表示取消成功。返回 NO 表示取消失败,即已经下载完成或者消息不存在。
BOOL cancelResult = [[RCCoreClient sharedCoreClient] cancelDownloadMediaUrl:@"remoteurl"];