2017-09-28 7 views
0

J'essaie de télécharger l'image, mais j'ai besoin de passer les paramètres et l'en-tête, j'ai reçu de l'aide de google sur les paramètres mais pas comment passer l'en-tête. En passant le code ci-dessous s'il vous plaît guide.Télécharger l'image de la galerie avec les paramètres et en-tête en utilisant Alamofire

est mon code ci-dessous:

if (request.requestType == "Multipart") 
    { 
     var strToken : String = "" 
     if let access_token = UserDefaults.standard.string(forKey: "auth_token"){ 
      let tokenValue = String(format: "Token %@", access_token); 
      strToken = tokenValue 
     } 

     let headers: HTTPHeaders = [ 
      "Authorization": strToken, 
      "Content-Type": "multipart/form-data" 
     ] 

     let img = request.image 
     let imgData = UIImageJPEGRepresentation(img, 0.2)! 
     do{ 

      let strURL = try strCompleteURL.asURL() 
     Alamofire.upload(multipartFormData: { multipartFormData in 
      multipartFormData.append(imgData, withName: "image_path",fileName: "file.jpg", mimeType: "image/jpg") 
      for (key, value) in params { 
       multipartFormData.append(value.data(using: String.Encoding.utf8.rawValue)!, withName: key) 
      } 
     }, 
         to:strURL) 
     { (result) in 
      switch result { 
      case .success(let upload, _, _): 

       upload.uploadProgress(closure: { (progress) in 
        print("Upload Progress: \(progress.fractionCompleted)") 
       }) 

       upload.responseJSON { response in 
        if response.result.isSuccess { 
         print(response.result.value as Any) 
         if let data = response.data{ 
          self.response.responseCode = response.response?.statusCode 
          self.processResult(data); 
         } 
        } 
       } 

      case .failure(let encodingError): 

        print(encodingError) 
      } 
     } 
     } 
     catch{ 

     } 

code ci-dessus tente de télécharger l'image mais pas réussir en raison de tête manquant, s'il vous plaît guider comment passer en-tête et les paramètres ainsi.

Merci

Répondre

3

Salut, je l'ai utilisé en-têtes comme celui-ci

func uploadImage(image:UIImage, url:String, _ successBlock:@escaping (_ response: JSON)->Void , errorBlock: @escaping (_ error: NSError) -> Void){ 

     let path = baseUrl + url 
     print(path) 


     let headers = ["authorization": AppData().token] 
     let imgData = UIImageJPEGRepresentation(image, 0.2)! 

     let URL = try! URLRequest(url: path, method: .post, headers: headers) 


     Alamofire.upload(multipartFormData: { (multipartFormData) in 
      multipartFormData.append(imgData, withName: "image",fileName: "file.jpg", mimeType: "file") 
for (key, value) in params { 
        multipartFormData.append(value.data(using: String.Encoding.utf8.rawValue)!, withName: key) 
       } 
     }, with: URL) { (result) in 
      switch result { 
      case .success(let upload, _, _): 

       upload.uploadProgress(closure: { (progress) in 
        print("Upload Progress: \(progress.fractionCompleted)") 
       }) 

       upload.responseJSON { response in 
        print(response.result.value) 
        if let value = response.result.value { 
         let json = JSON(value) 
         successBlock(json) 
        } 
       } 

      case .failure(let encodingError): 
       print(encodingError) 
       errorBlock(encodingError as NSError) 

      } 
     } 

    } 
+0

problème avec cette ligne laisser URL = essayer! URLRequest (url: chemin, méthode: .post, en-têtes: en-têtes) –

+0

Quel problème avez-vous rencontré? –

+0

Je reçois la réponse de l'API est ÉCHEC: responseSerializationFailed (Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed (Domaine d'erreur = Code NSCocoaErrorDomain = 3840 "Valeur non valide autour du caractère 0." UserInfo = {NSDebugDescription = Valeur non valide autour du caractère 0.})) ▿ échec: AFError ▿ responseSerializationFailed: ResponseSerializationFailureReason –

0

La fonction Alamofire .upload() a plus de paramètres disponibles que ce que vous avez utilisé. (Ceci peut être vu dans le fichier Alamofire.swift dans leur dossier pod)

public func upload(
multipartFormData: @escaping (MultipartFormData) -> Void, 
usingThreshold encodingMemoryThreshold: UInt64 = SessionManager.multipartFormDataEncodingMemoryThreshold, 
to url: URLConvertible, 
method: HTTPMethod = .post, 
headers: HTTPHeaders? = nil, 
encodingCompletion: ((SessionManager.MultipartFormDataEncodingResult) -> Void)?) 
{ 
    return ... 
} 

Dans là, vous pouvez le voir il y a un paramètre pour les en-têtes que vous ne l'avez pas fait usage de.

Sans l'exécution du code moi-même et tout vérifier, ce serait ma meilleure hypothèse où vos têtes iraient