2017-04-03 1 views
0

J'envoie une requête via ce format pour faire une requête avec des paramètres. Mais comment vais-je envoyer l'image en tant que corps multipart avec ces paramètres?Comment faire pour mettre les paramètres de demande avec l'image Alamofire?

class APIManager: NSObject { 
    enum Router: URLRequestConvertible { 

     static var baseURLString = baseURLString 
     static let xSource = X_SOURCE_HEADER 

     case updateProfile([String: AnyObject]) 

     var method: HTTPMethod { 
      switch self { 
      case .updateProfile: 
       return .put 
      } 
     } 

     var path: String { 
      switch self { 
      case .updateStockShelfUnits: 
       return profile_url 
      } 
     } 
     func asURLRequest() throws -> URLRequest { 
      let url = try GlobalData.gBaseURLString.asURL() 
      var urlRequest = URLRequest(url: url.appendingPathComponent(path)) 
      urlRequest.httpMethod = method.rawValue 

      switch self { 

      case .updateProfile(let parameters): 
       urlRequest.setValue(access_token, forHTTPHeaderField: "X-User-Token") 
       urlRequest = try URLEncoding.default.encode(urlRequest, with: parameters) 
      } 
      return urlRequest 
     } 
    } 

    func makeRequestToUpdateProfile(param: [String : AnyObject], img: UIImage, completion: @escaping completionHandlerWithSuccessAndErrorMessage) { 

     Alamofire.request(Router.updateprofile(param)) .responseJSON { response in 
      switch response.result { 
      case .success(let JSON): 
       print(JSON) 
       completion(true, "Success") 
      case .failure(let Error): 
       print("Request failed with error: \(Error)") 
       completion(false, Error.localizedDescription) 
      } 
     } 
    } 
} 

Ici ce que je vais faire pour faire une demande de paramètres avec l'image en tant que corps en plusieurs parties? Demande d'API avec seulement des paramètres qui fonctionnent bien.

Répondre

1

Télécharger Photo/fichier avec paramètres et -têtes personnalisés via Swift 3 et Alamofire 4

// import Alamofire 
func uploadWithAlamofire() { 
    let image = UIImage(named: "bodrum")! 

    // define parameters 
    let parameters = [ 
    "hometown": "yalikavak", 
    "living": "istanbul" 
    ] 

    Alamofire.upload(multipartFormData: { multipartFormData in 
    if let imageData = UIImageJPEGRepresentation(image, 1) { 
     multipartFormData.append(imageData, withName: "file", fileName: "file.png", mimeType: "image/png") 
    } 

    for (key, value) in parameters { 
     multipartFormData.append((value?.data(using: .utf8))!, withName: key) 
    }}, to: "upload_url", method: .post, headers: ["Authorization": "auth_token"], 
     encodingCompletion: { encodingResult in 
      switch encodingResult { 
      case .success(let upload, _, _): 
      upload.response { [weak self] response in 
       guard let strongSelf = self else { 
       return 
       } 
       debugPrint(response) 
      } 
      case .failure(let encodingError): 
      print("error:\(encodingError)") 
      } 
    }) 
} 

Crédit: fatihyildizhan