2016-12-31 2 views
0

Я пытаюсь загрузить видео на сервер через Alamofire 4.0, и я хочу добавить индикатор выполнения, чтобы показать процент процесса загрузки во время процесса загрузки, как я могу это сделать, используя ту же функцию загрузки из Alamofire.Как я могу добавить индикатор выполнения с меткой с процентом хода загрузки в Alamofire 4.0

Мой код функции загрузки:

Alamofire.upload(multipartFormData: { multipartFormData in 



         multipartFormData.append(url.absoluteURL!, withName: "videoFile", fileName: "alaa", mimeType: "mov") 
         multipartFormData.append("video".data(using: .utf8)!, withName: "load") 
         multipartFormData.append("record".data(using: .utf8)!, withName: "type") 


        }, with: URL, encodingCompletion: { (result) in 
         // code 
         print("uploaded") 
        }) 

ответ

1

цитировать непосредственно из Документов AlamoFire:

Загрузить Прогресс

В то время как ваш пользователь ждет их загрузки, чтобы закончить, иногда может быть полезным, чтобы показать ход загрузки пользователю. Любое UploadRequest может сообщать как о ходе выполнения загрузки, так и о загружении данных ответа с использованием API uploadProgress и downloadProgress.

let fileURL = Bundle.main.url(forResource: "video", withExtension: "mov") 

Alamofire.upload(fileURL, to: "https://httpbin.org/post") 
    .uploadProgress { progress in // main queue by default 
     print("Upload Progress: \(progress.fractionCompleted)") 
    } 
    .downloadProgress { progress in // main queue by default 
     print("Download Progress: \(progress.fractionCompleted)") 
    } 
    .responseJSON { response in 
     debugPrint(response) 
    } 
+0

где URL-адрес видео в этой строке? let fileURL = Bundle.main.url (forResource: "video", withExtension: "mov") –

+0

Это означает, что вы получите URL-адрес файла с именем video.mov в своем основном комплекте. – bubuxu

+0

Это пример кода, а не код, специфичный для вашей проблемы. В этой строке создается файл url для файла с именем «video.mov» из пакета приложений. –

0

Пожалуйста, проверьте его.

  var imgData = Data() 
      if image != nil { 

       imgData = UIImageJPEGRepresentation(image!, 1.0)! 
      } 

      Alamofire.upload(multipartFormData:{ multipartFormData in 
       multipartFormData.append(imgData, withName: "image", fileName: "imagefilename", mimeType: "image/jpeg") 

       for (key, value) in param { 

        //let data = (value as! String).data(using: String.Encoding.utf8)! 
        let data = (value as AnyObject).data(using: String.Encoding.utf8.rawValue) 
        multipartFormData.append(data!, withName: key as! String) 
       } 
      }, 
          usingThreshold:UInt64.init(), 
          to:fullLink, 
          method:.post, 
          headers:[:], 
          encodingCompletion: { encodingResult in 

           switch encodingResult { 

           case .success(let upload, _, _): 

            upload.uploadProgress { progress in // main queue by default 

             print("Upload Progress: \(progress.fractionCompleted)") 
            } 

            upload.responseJSON { response in 

             debugPrint(response) 

             if let TempresponseDict:NSDictionary = response.result.value as? NSDictionary { 

              if (TempresponseDict.object(forKey: "response") as? String)?.caseInsensitiveCompare("success") == .orderedSame { 

               CompletionHandler(true, TempresponseDict) 
              } 
              else { 

               var statusCode = response.response?.statusCode 

               if let error = response.result.error as? AFError { 

                statusCode = error._code // statusCode private 

                switch error { 

                case .invalidURL(let url): 
                 print("Invalid URL: \(url) - \(error.localizedDescription)") 
                case .parameterEncodingFailed(let reason): 
                 print("Parameter encoding failed: \(error.localizedDescription)") 
                 print("Failure Reason: \(reason)") 
                case .multipartEncodingFailed(let reason): 
                 print("Multipart encoding failed: \(error.localizedDescription)") 
                 print("Failure Reason: \(reason)") 
                case .responseValidationFailed(let reason): 
                 print("Response validation failed: \(error.localizedDescription)") 
                 print("Failure Reason: \(reason)") 

                 switch reason { 

                 case .dataFileNil, .dataFileReadFailed: 
                  print("Downloaded file could not be read") 
                 case .missingContentType(let acceptableContentTypes): 
                  print("Content Type Missing: \(acceptableContentTypes)") 
                 case .unacceptableContentType(let acceptableContentTypes, let responseContentType): 
                  print("Response content type: \(responseContentType) was unacceptable: \(acceptableContentTypes)") 
                 case .unacceptableStatusCode(let code): 
                  print("Response status code was unacceptable: \(code)") 
                  statusCode = code 
                 } 
                case .responseSerializationFailed(let reason): 

                 print("Response serialization failed: \(error.localizedDescription)") 
                 print("Failure Reason: \(reason)") 
                 // statusCode = 3840 ???? maybe.. 
                } 

                print("Underlying error: \(error.underlyingError)") 
               } 
               else if let error = response.result.error as? URLError { 

                print("URLError occurred: \(error)") 
               } 
               else { 

                print("Unknown error: \(response.result.error)") 
               } 

               print("\(statusCode)") // the status code 

               CompletionHandler(false, TempresponseDict) 
              } 
             } 
             else { 

              CompletionHandler(false, NSDictionary()) 
             } 
            } 

           case .failure(let encodingError): 

            print(encodingError) 
            CompletionHandler(false, NSDictionary()) 
           } 
      }) 
     } 
+0

fullLink Я должен поместить его как строку или urlrequest, потому что во втором случае он дает мне нуль, поэтому видео не загружается –

+0

, и эта часть я не понимаю, как я могу иметь дело, если у меня есть 2 параметра, такие как мой код выше . для (ключ, значение) в param { // let data = (значение as! String) .data (используя: String.Encoding.utf8)! пусть данных = (значение как AnyObject) .data (с использованием: String.Encoding.utf8.rawValue) multipartFormData.append (данные !, withName: ключ в качестве строки) } –

+0

fullLink = Строка –

 Смежные вопросы

  • Нет связанных вопросов^_^