NIMResourceManagerProtocol.h 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. //
  2. // NIMResourceManager.h
  3. // NIMLib
  4. //
  5. // Created by Netease.
  6. // Copyright (c) 2015 Netease. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. @class NIMResourceQueryOption;
  10. @class NIMCacheQueryResult;
  11. @class NIMResourceExtraInfo;
  12. NS_ASSUME_NONNULL_BEGIN
  13. /**
  14. * 缓存搜索 block
  15. *
  16. * @param error 错误,如果成功则 error 为 nil
  17. * @param results 成功时的结果列表,内部为 NIMCacheQueryResult
  18. */
  19. typedef void(^NIMResourceSearchHandler)(NSError * __nullable error, NSArray<NIMCacheQueryResult *> * __nullable results);
  20. /**
  21. * 缓存删除 block
  22. *
  23. * @param error 错误,如果成功则 error 为 nil
  24. * @param freeBytes 释放的磁盘空间大小
  25. */
  26. typedef void(^NIMResourceDeleteHandler)(NSError * __nullable error, long long freeBytes);
  27. /**
  28. * 上传Block
  29. *
  30. * @param urlString 上传后得到的URL,失败时为nil
  31. * @param error 错误信息,成功时为nil
  32. */
  33. typedef void(^NIMUploadCompleteBlock)(NSString * __nullable urlString,NSError * __nullable error);
  34. /**
  35. * 文件快传查询完成Block
  36. *
  37. * @param urlString 查询后的URL,如果未上传过该文件,则为nil
  38. * @param threshold 支持文件快传的文件大小阈值,小于该阈值的则不支持快传,单位为Byte
  39. * @param error 文件快传请求的错误信息,失败是为nil
  40. */
  41. typedef void(^NIMFileQuickTransferCompleteBlock)(NSString * __nullable urlString, NSInteger threshold, NSError * __nullable error);
  42. /**
  43. * 上传/下载进度Block
  44. *
  45. * @param progress 进度 0%-100%
  46. * @discussion 如果下载的文件是以 Tranfer-Encoding 为 chunked 的形式传输,那么 progress 为已下载文件大小的负数
  47. */
  48. typedef void(^NIMHttpProgressBlock)(float progress);
  49. /**
  50. * 下载Block
  51. *
  52. * @param error 错误信息,成功时为nil
  53. */
  54. typedef void(^NIMDownloadCompleteBlock)(NSError * __nullable error);
  55. /**
  56. * 短链换源链完成回调
  57. * @param error 错误信息,成功时nil
  58. * @param urlString 源链
  59. */
  60. typedef void(^NIMFetchURLCompletion)(NSError * __nullable error, NSString * __nullable urlString);
  61. /**
  62. * 资源管理
  63. */
  64. @protocol NIMResourceManager <NSObject>
  65. /**
  66. * 上传文件
  67. *
  68. * @param filepath 上传文件路径
  69. * @param progress 进度Block
  70. * @param completion 上传Block
  71. */
  72. - (void)upload:(NSString *)filepath
  73. progress:(nullable NIMHttpProgressBlock)progress
  74. completion:(nullable NIMUploadCompleteBlock)completion;
  75. /**
  76. * 上传文件
  77. *
  78. * @param filepath 上传文件路径
  79. * @param scene 场景类别
  80. * @param progress 进度Block
  81. * @param completion 上传Block
  82. */
  83. - (void)upload:(NSString *)filepath
  84. scene:(nonnull NSString *)scene
  85. progress:(nullable NIMHttpProgressBlock)progress
  86. completion:(nullable NIMUploadCompleteBlock)completion;
  87. /**
  88. * 上传文件
  89. *
  90. * @param filepath 上传文件路径
  91. * @param scene 场景类别
  92. * @param md5 文件MD5
  93. * @param progress 进度Block
  94. * @param completion 上传Block
  95. */
  96. - (void)upload:(NSString * _Nonnull)filepath
  97. scene:(nullable NSString *)scene
  98. md5:(nullable NSString *)md5
  99. progress:(nullable NIMHttpProgressBlock)progress
  100. completion:(nullable NIMUploadCompleteBlock)completion;
  101. /**
  102. * 上传文件
  103. *
  104. * @param filepath 上传文件路径
  105. * @param extraInfo 资源辅助信息
  106. * @param progress 进度Block
  107. * @param completion 上传Block
  108. */
  109. - (void)upload:(NSString * _Nonnull)filepath
  110. extraInfo:(nullable NIMResourceExtraInfo *)extraInfo
  111. progress:(nullable NIMHttpProgressBlock)progress
  112. completion:(nullable NIMUploadCompleteBlock)completion;
  113. /**
  114. * 下载文件
  115. *
  116. * @param urlString 下载的RL
  117. * @param filepath 下载路径
  118. * @param progress 进度Block
  119. * @param completion 完成Block
  120. */
  121. - (void)download:(NSString *)urlString
  122. filepath:(NSString *)filepath
  123. progress:(nullable NIMHttpProgressBlock)progress
  124. completion:(nullable NIMDownloadCompleteBlock)completion;
  125. /**
  126. * 下载文件
  127. *
  128. * @param urlString 下载的RL
  129. * @param filepath 下载路径
  130. * @param extraInfo 资源辅助信息
  131. * @param progress 进度Block
  132. * @param completion 完成Block
  133. */
  134. - (void)download:(NSString *)urlString
  135. filepath:(NSString *)filepath
  136. extraInfo:(NIMResourceExtraInfo * _Nullable)extraInfo
  137. progress:(NIMHttpProgressBlock _Nullable)progress
  138. completion:(NIMDownloadCompleteBlock _Nullable)completion;
  139. /**
  140. * 取消上传/下载任务
  141. *
  142. * @param filepath 上传/下载任务对应的文件路径
  143. * @discussion 如果同一个文件同时上传或者下载(理论上不应该出现这种情况),ResourceManager会进行任务合并,基于这个原则cancel的操作对象是某个文件对应的所有的上传/下载任务
  144. */
  145. - (void)cancelTask:(NSString *)filepath;
  146. /**
  147. * 规范化 URL 地址
  148. *
  149. * @param urlString url 地址
  150. * @discussion 按照 NIMSDK 的要求对 url 进行规范化处理,调用该接口等同于同时调用 convertHttpToHttps: 和 convertURLToAcceleratedURL:
  151. */
  152. - (NSString *)normalizeURLString:(NSString *)urlString;
  153. /**
  154. * 将 http url 转换为 https url
  155. *
  156. * @param urlString http url 地址
  157. * @discussion SDK 会自动处理除自定义消息外所有消息内的 http url 以保证符合苹果的审核请求,但是自定义消息中的 http 地址 SDK 并不知道具体属性在哪,所以在做这些文件下载时,需要上层自己处理
  158. * 如果传入的 url 是 https 地址,直接返回字符串本身。如果传入的 url 是云信无法识别 host 的 http 地址,直接返回添加了 https 的地址
  159. */
  160. - (NSString *)convertHttpToHttps:(NSString *)urlString;
  161. /**
  162. * 将 url 转换为加速后的 CDN url 地址
  163. *
  164. * @param urlString 未加速 url 地址
  165. * @discussion SDK 会自动处理除自定义消息外所有消息内的 url 进行 CDN 加速,但是自定义消息中的 url 地址 SDK 并不知道具体属性在哪,所以在做这些文件下载时,需要上层传入对应的 URL 替换为走 CDN 格式的地址,以获得 CDN 加速的效果
  166. */
  167. - (NSString *)convertURLToAcceleratedURL:(NSString *)urlString;
  168. /**
  169. * 将传入的 nos 图片 url 调整为缩略图形式 url
  170. *
  171. * @param urlString 图片url
  172. *
  173. */
  174. - (NSString *)imageThumbnailURL:(NSString *)urlString;
  175. /**
  176. * 将传入的 nos 视频 url 调整为缩略图形式 url
  177. *
  178. * @param urlString 视频url
  179. *
  180. */
  181. - (NSString *)videoThumbnailURL:(NSString *)urlString;
  182. /**
  183. * 搜索缓存的资源文件
  184. *
  185. * @param option 搜索选项
  186. * @param completion 完成回调
  187. */
  188. - (void)searchResourceFiles:(NIMResourceQueryOption *)option
  189. completion:(NIMResourceSearchHandler)completion;
  190. /**
  191. * 删除缓存的资源文件
  192. *
  193. * @param option 搜索选项
  194. * @param completion 完成回调
  195. */
  196. - (void)removeResourceFiles:(NIMResourceQueryOption *)option
  197. completion:(NIMResourceDeleteHandler)completion;
  198. /**
  199. * 使用短链换源链
  200. *
  201. * @param shortCode 短链
  202. * @param completion 完成回调
  203. * @discussion 当用户后台配置了NOS文件安全,文件上传的URL为短链,无法直接下载,
  204. * 可通过该接口换取源链
  205. */
  206. - (void)fetchNOSURLWithURL:(NSString *)shortCode
  207. completion:(NIMFetchURLCompletion)completion;
  208. /**
  209. * 使用短链换源链
  210. *
  211. * @param shortCode 短链
  212. * @param roomId 聊天室ID
  213. * @param completion 完成回调
  214. * @discussion 当用户后台配置了NOS文件安全,文件上传的URL为短链,无法直接下载,
  215. * 可通过该接口换取源链
  216. */
  217. - (void)fetchNOSURLWithURL:(NSString *)shortCode
  218. roomId:(NSString * _Nullable)roomId
  219. completion:(NIMFetchURLCompletion)completion;
  220. @end
  221. NS_ASSUME_NONNULL_END