123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236 |
- //
- // PublishUploadManager.swift
- // RainbowPlanet
- //
- // Created by Christopher on 2019/7/21.
- // Copyright © 2019 RainbowPlanet. All rights reserved.
- //
- import UIKit
- import SwiftyJSON
- class PublishUploadManager: NSObject {
-
- private static let _sharedInstance = PublishUploadManager()
-
- private override init() {} // 私有化init方法
-
- class func shared() -> PublishUploadManager {
- return _sharedInstance
- }
-
- // 视频上传参数
- var mediaType: PublishMediaType = .image
- var videoPath: String = ""
- var coverImagePath: String = ""
- var videoImage: UIImage? {
- didSet {
- imageArr = [videoImage] as? Array<UIImage>
- }
- }
-
- // 图片上传参数
- var imageArr: Array<UIImage>?
-
- // 发布参数
- var selTopicIdArr: Array<String> = []
- var pubTitle: String = ""
- var pubContent: String = ""
- var locationStr: String = ""
-
- // 视频id,当type为video时必填
- var paraVideo: String = ""
- // 主图Url
- var majorImageUrl: String?
- // 发布图片のUrlArray
- var imageUrlArray: Array<String> = []
-
- var uploadManager: AlivcShortVideoUploadManager?
-
-
- var progressView: PublishUploadProgressView?
- // 记录当前是否发布完成
- var isPublishFinished: Bool = true
- }
- // MARK: - 视频上传流程
- extension PublishUploadManager: AlivcShortVideoUploadManagerDelegate {
-
- // 设置视频上传参数
- func setVideoPath(_ mediaType: PublishMediaType, _ videoPath: String, _ coverImagePath: String, _ videoImage: UIImage) {
- self.mediaType = mediaType
- self.videoPath = videoPath
- self.coverImagePath = coverImagePath
- self.videoImage = videoImage
- }
-
- // 获取上传地址和凭证
- func communityVideoUploadAuthApi() {
- isPublishFinished = false
-
- var vTitle: String = ""
- if videoPath.count > 20 {
- vTitle = String(videoPath.suffix(20))
- } else {
- vTitle = videoPath
- }
- SwiftMoyaNetWorkServiceCommunity.shared().communityVideoUploadAuthApi(title: vTitle, filename: vTitle, cover_url: coverImagePath) {
- [weak self] (communityVideoAuthModel) -> (Void) in
- let communityVideoAuthModel = communityVideoAuthModel as? CommunityVideoAuthModel
- self?.paraVideo = communityVideoAuthModel?.videoId ?? ""
- self?.startUploadVideo(communityVideoAuthModel!)
- }
-
- }
-
- // 上传视频
- func startUploadVideo(_ authModel: CommunityVideoAuthModel) {
- let info = AliyunUploadSVideoInfo()
- uploadManager = AlivcShortVideoUploadManager.shared()
- uploadManager?.setCoverImagePath(coverImagePath, videoInfo: info, videoPath: videoPath)
- uploadManager?.managerDelegate = self
- uploadManager?.uploadAddress = authModel.uploadAddress
- uploadManager?.videoId = authModel.videoId
- uploadManager?.uploadAuth = authModel.uploadAuth
- uploadManager?.startUpload()
- }
-
- // 上传进度回调
- func uploadManager(_ manager: AlivcShortVideoUploadManager!, updateProgress progress: CGFloat) {
- DispatchQueue.main.async(execute: {
- print("\n--------uploadProgress == \(progress)")
- // self.progressView.progress = Float(progress)
-
- self.progressView?.uploadProgress = Float(progress)
- })
- }
-
- // 上传状态回调
- func uploadManager(_ manager: AlivcShortVideoUploadManager!, uploadStatusChangedTo newStatus: AlivcUploadStatus) {
- switch newStatus {
- case AlivcUploadStatus.failure:
- DispatchQueue.main.async(execute: {
- SwiftProgressHUD.shared().showText("上传失败!")
- })
-
- case AlivcUploadStatus.success:
- // 上传封面图
- self.uploadVideoCoverImage()
-
- default:
- break
- }
- }
-
- // 上传视频封面图
- func uploadVideoCoverImage() {
- SwiftMoyaNetWorkServiceConfig.shared().configUploadSingleImgWithoutHudApi(imageArray: [videoImage!]) {
- [weak self] (imgUrl) -> (Void) in
- // 设置主图
- self?.majorImageUrl = imgUrl as? String
-
- print("------视频上传成功,去发布")
- self?.progressView?.curUploadStatus = .success
- self?.communityPublishApi()
- }
- }
-
- }
- // MARK: - 图片上传流程
- extension PublishUploadManager {
-
- // 设置图片上传参数
- func setImagesPath(_ imageArr: Array<UIImage>) {
- self.imageArr = imageArr
- }
-
- // 上传图片
- func uploadAllImages(totalTimes: Int) {
- isPublishFinished = false
-
- var curTimes: Int = totalTimes
-
- print("-----StartUpload,totalTimes == \(totalTimes)")
- SwiftMoyaNetWorkServiceConfig.shared().configUploadSingleImgWithoutHudApi(imageArray: [self.imageArr![totalTimes]]) {
- [weak self] (imgUrl) -> (Void) in
- let urlStr: String = imgUrl as! String
- self?.imageUrlArray.append(urlStr)
- if curTimes == 0 {
- // 设置主图
- self?.majorImageUrl = urlStr
- }
-
- print("-----FinishUpload,Times == \(curTimes)")
- curTimes += 1
- // 更新进度
- DispatchQueue.main.async {
- print("----\(Thread.current)")
- print("----uploadProgress == \(Float(curTimes)/Float((self?.imageArr!.count)!))")
-
- self?.progressView?.uploadProgress = Float(curTimes/(self?.imageArr!.count)!)
-
- }
-
- if curTimes < self?.imageArr?.count ?? 0 {
- self?.uploadAllImages(totalTimes: curTimes)
- } else {
- print("------图片上传成功,去发布")
- self?.progressView?.curUploadStatus = .success
- self?.communityPublishApi()
- }
- }
- }
- }
- // MARK: - 发布流程
- extension PublishUploadManager {
-
- // 设置发布上传参数
- func setPublishParas(_ selTopicIdArr: Array<String>, _ pubTitle: String, _ pubContent: String, _ locationStr: String) {
- self.selTopicIdArr = selTopicIdArr
- self.pubTitle = pubTitle
- self.pubContent = pubContent
- self.locationStr = locationStr
- }
-
- // 发布Api
- private func communityPublishApi() {
-
- var typeStr: String = ""
- if mediaType == .image {
- typeStr = "image"
- } else {
- typeStr = "video"
- }
-
- let topicJsonStr = JSON(selTopicIdArr).description
- let imgsJsonStr = JSON(imageUrlArray).description
-
- print("----mediaType == \(typeStr)\n----pubTitle = \(pubTitle)\n----topicJsonStr == \(topicJsonStr)\n----imgsJsonStr == \(imgsJsonStr)")
-
- SwiftMoyaNetWorkServiceCommunity.shared().communityPublishApi(type: typeStr, img: majorImageUrl ?? "", topic_ids: topicJsonStr, video: paraVideo, title: pubTitle, content: pubContent, location: locationStr, imgs: imgsJsonStr) {
- [weak self] (communityPublishModel) -> (Void) in
- let communityPublishModel = communityPublishModel as? CommunityPublishModel
- self?.publishSuccessAction(communityPublishModel!)
- }
- }
-
- private func publishSuccessAction(_ pubModel: CommunityPublishModel) {
- var typeStr: String = ""
- if mediaType == .image {
- typeStr = "image"
- } else {
- typeStr = "video"
- }
-
- VirusViewModel.shared.publishVirueRecordAddApi(postId: pubModel.postId, postType: typeStr, title: pubTitle, content: pubContent, postCover: majorImageUrl)
-
- print("\n----------发布成功!!!!!")
- isPublishFinished = true
- // progressView?.hide()
-
- progressView?.curUploadStatus = UploadStatus.failure
- }
- }
|