Пример метода загрузки картинки Alamofire с прогресс баром.
Приведу пример загрузки фотографии в фоновом потоке при помощи Alomofire. Также в этом примере процесс загрузки мы демонстрируем прогресс-баром. Заранее прошу прощения за отсутствие комментариев к коду. Однако, если в комментариях будут задаваться вопросы, то ответы на них я буду размещать в статье.
// // proSwift.ru // extension ViewController { func uploadImage(image: UIImage, progress: (percent: Float) -> Void, completion: (tags: [String], colors: [PhotoColor]) -> Void) { guard let imageData = UIImageJPEGRepresentation(image, 0.5) else { print(" Не могу сделать JPEG") return } Alamofire.upload( ImaggaRouter.Content, //это запрос с ключом доступа к ресурсу, куда мы загружаем картинку multipartFormData: { multipartFormData in multipartFormData.appendBodyPart(data: imageData, name: "imagefile", fileName: "image.jpg", mimeType: "image/jpeg") }, encodingCompletion: { encodingResult in switch encodingResult { case .Success(let upload, _, _): upload.progress { bytesWritten, totalBytesWritten, totalBytesExeptedToWrite in dispatch_async(dispatch_get_main_queue()) { let percent = (Float(totalBytesWritten) / Float(totalBytesExeptedToWrite)) progress(percent: percent) } } upload.validate() upload.responseJSON { response in // проверим ответ процедуры загрузки картинки guard response.result.isSuccess else { print ("Ошибка во время загрузки файла: \(response.result.error)") completion(tags: [String](), colors: [PhotoColor]()) return } // получим нужно информацию, согласно API ресурса для загрузки картинок. В данном примере мы получаем ID картинки, которую загрузили guard let responseJSON = response.result.value as? [String: AnyObject], uploadedFiles = responseJSON["uploaded"] as? [AnyObject], firstFile = uploadedFiles.first as? [String:AnyObject], firstFileId = firstFile["id"] as? String else { print("Сервер сообщает об ошибке") completion(tags: [String](), colors: [PhotoColor]()) return } print("Загрузка с ID \(firstFileId)") // если картинка успешно загружена и ID получен, выполняем какие либо манипуляции далее... self.downloadTags(firstFileId) { tags in self.downloadColors(firstFileId) { colors in completion(tags: tags, colors: colors) } } } case .Failure(let encodingError): print(encodingError) } }) } }
Добавить комментарий