Пример метода загрузки картинки 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)
        }
    })
  }
}

 

Добавить комментарий

Ваш адрес email не будет опубликован.

*

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.