Skip to content

多媒体管理

消息里的文件,图片,视频,语音等多媒体资源都是通过多媒体管理器来管理的。

负责消息的多媒体资源的管理,包括上传,下载等操作。

文档只介绍核心方法,更多内容查看代码的[WKSDK shared].mediaManager接口

自定义上传

创建任务

伪代码如下:

objc

// 继承WKMessageFileDownloadTask
@interface WKFileUploadTask : WKMessageFileUploadTask

@end
objc

// 实现四个方法  initWithMessage  resume cancel suspend
@implementation WKFileUploadTask

(instancetype)initWithMessage:(WKMessage *)message {
	self = [super initWithMessage:message];
	if(self) {
			[self initTask];
	}
	return self;
}

(void) initTask {
  WKMediaContent *mediaContent = (WKMediaContent*)self.message.content;

  NSString *fileLocalPath =  mediaContent.localPath;  // 附件本地路径

  // 以下为上传伪代码
  NSURLSessionDataTask *task = [serverAPI upload:fileLocalPath].progress(^(progress){
        self.progress = progress; // 内部方法 更新任务进度
        self.status = WKTaskStatusProgressing; // 内部方法  更新任务状态
        [self update]; // 内部方法 通知更新
  }).success(^{
      self.status = WKTaskStatusSuccess; // 内部方法  更新任务状态
      [self update]; // 内部方法 通知更新
  }).catch(^(NSError *error){
       self.status = WKTaskStatusError;  // 内部方法  更新任务状态
       self.error = error;  // 内部方法  更新错误信息
        [self update]; // 内部方法 通知更新
  });
  self.task = task;
}

// 任务恢复
(void) resume {
  [self.task resume];
}

// 任务取消
(void) cancel {
  [self.task cancel];
}

// 任务挂起
(void)suspend {
  [self.task suspend];
}

@end

注册任务

注册上传任务

objc
  [[WKSDK shared].mediaManager setUploadTaskProvider:^id<WKTaskProto> _Nonnull(WKMessage * _Nonnull message) {
        return [[WKFileUploadTask alloc] initWithMessage:message];
  }];

自定义下载

所有带附件消息的下载都会通过此下载任务进行下载

创建任务

伪代码如下:

objc

// 继承WKMessageFileDownloadTask
@interface WKFileDownloadTask : WKMessageFileDownloadTask

@end
objc

// 实现四个方法  initWithMessage  resume cancel suspend
@implementation WKFileDownloadTask

(instancetype)initWithMessage:(WKMessage *)message {
	self = [super initWithMessage:message];
	if(self) {
			[self initTask];
	}
	return self;
}

(void) initTask {
  WKMediaContent *mediaContent = (WKMediaContent*)self.message.content;

  NSString *downloadURL =  mediaContent.remoteUrl;  // 附件下载地址

  // 以下为下载伪代码
  NSURLSessionDownloadTask *task = [serverAPI download:downloadURL].progress(^(progress){
        self.progress = progress; // 内部方法 更新任务进度
        self.status = WKTaskStatusProgressing; // 内部方法  更新任务状态
        [self update]; // 内部方法 通知更新
  }).success(^{
      self.status = WKTaskStatusSuccess; // 内部方法  更新任务状态
      [self update]; // 内部方法 通知更新
  }).catch(^(NSError *error){
       self.status = WKTaskStatusError;  // 内部方法  更新任务状态
       self.error = error;  // 内部方法  更新错误信息
        [self update]; // 内部方法 通知更新
  });
  self.task = task;
}

// 任务恢复
(void) resume {
  [self.task resume];
}

// 任务取消
(void) cancel {
  [self.task cancel];
}

// 任务挂起
(void)suspend {
   [self.task suspend];
}

@end

注册任务

注册下载任务

objc
  [[WKSDK shared].mediaManager setDownloadTaskProvider:^id<WKTaskProto> _Nonnull(WKMessage * _Nonnull message) {
        return [[WKFileDownloadTask alloc] initWithMessage:message];
  }];

进度管理

上传

获取指定消息的上传任务,然后获取进度

objc
WKMessageFileUploadTask *uploadTask = [[WKSDK shared] getMessageFileUploadTask:message];
if(uploadTask) {
  float progress = uploadTask.progress;
}

监听上传任务进度

objc
WKMessageFileUploadTask *uploadTask = [[WKSDK shared] getMessageFileUploadTask:message];
if(uploadTask) {
  [uploadTask addListener:^{
    float progress = uploadTask.progress;
  }];
}

下载

下载消息里的附件

objc
WKMessageFileDownloadTask *downloadTask = [[WKSDK shared].mediaManager download:message];

获取指定消息的下载任务,然后获取进度

objc

WKMessageFileDownloadTask *downloadTask = [[WKSDK shared] getMessageFileDownloadTask:message];
if(downloadTask) {
  float progress = downloadTask.progress;
}

监听下载任务进度

objc
WKMessageFileDownloadTask *downloadTask = [[WKSDK shared] getMessageFileDownloadTask:message];
if(downloadTask) {
  [downloadTask addListener:^{
    float progress = downloadTask.progress;
  }];
}

本文档内容版权属于 上海信必达网络科技有限公司,保留所有权利