2017-02-12 2 views
0

Alamofire를 사용하여 API 서버에 이미지 업로드 관련 질문이 있습니다.Alamofire를 사용하여 API 서버에 이미지 업로드

base을 : http://vietnamtravelguide-app.com/quangnam/api_inquangnam/tips/create?user_id= ""& 토큰 = "" 3 개의 매개 변수 : location_id, 내용, 참고 ImageName

이 POSTMAN

It's ok to post by POSTMAN

내 코드에 의해 게시 괜찮은지 :

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

     }, with: path, encodingCompletion: {encodingResult in 
      switch encodingResult { 
      case .success(let upload, _, _): 
      upload.responseJSON { response in 
       print(response.result) 
      switch response.result { 
      case .success: 
       let json = JSON(response.result.value!) 
       if(delegate != nil) { 
        delegate!.didReceiveResult(json,basePath: basePath) 
       } 
      case .failure(let error): 
       print(error) 
      }      } 
      case .failure(let encodingError): 
       print(encodingError) 
      } 

      }) 

(이미지로 매개 변수 캐스팅의 이미지) 이미지 포함 디버그 할 때 응답이 반환됩니다. 결과가 반환되지 않습니다.

답변

3

나머지 두 매개 변수 contentlocation_id은 업로드하지 않습니다.

이것을 시도해보고 결과를 확인하십시오. 여기에 SwiftyJSON도 사용했습니다.

이것은 모든 API 처리를위한 나의 APIManager 클래스입니다.

import Alamofire 
import SwiftyJSON 

class APIManager: NSObject { 

    class func apiMultipart(serviceName:String,parameters: [String:Any]?, completionHandler: @escaping (JSON?, NSError?) ->()) { 

     Alamofire.upload(multipartFormData: { (multipartFormData:MultipartFormData) in 
      for (key, value) in parameters! { 
       if key == "imageName" { 
        multipartFormData.append(
         value as! Data, 
         withName: key, 
         fileName: "swift_file.jpg", 
         mimeType: "image/jpg" 
        ) 
       } else { 
        //Data other than image 
        multipartFormData.append((value as! String).data(using: .utf8)!, withName: key) 
       } 
      } 
     }, usingThreshold: 1, to: serviceName, method: .post, headers: ["yourHeaderKey":"yourHeaderValue"]) { (encodingResult:SessionManager.MultipartFormDataEncodingResult) in 

      switch encodingResult { 
      case .success(let upload, _, _): 
       upload.responseJSON { response in 
        if response.result.error != nil { 
         completionHandler(nil,response.result.error as NSError?) 
         return 
        } 
        print(response.result.value!) 
        if let data = response.result.value { 
         let json = JSON(data) 
         completionHandler(json,nil) 
        } 
       } 
       break 

      case .failure(let encodingError): 
       print(encodingError) 
       completionHandler(nil,encodingError as NSError?) 
       break 
      } 
     } 
    } 
} 

당신이 그때 당신은 그냥 컨트롤러의 매개 변수를 형성 호출하기 위해 이제 ["yourHeaderKey":"yourHeaderValue"]

대신에 ["":""]으로 경기장을 떠나지 수있는 헤더가없는 경우.

var params = [String:AnyObject]() 
params["content"] = "something" as AnyObject? 
params["location_id"] = "201" as AnyObject? 

// Grab your image from some variable or imageView. Here self.profileImage is a UIImage object 
if let profileImageData = self.profileImage { 
    if let imageData = UIImageJPEGRepresentation(profileImageData, 0.5) { 
     params["imageName"] = imageData as AnyObject? 
     APIManager.apiMultipart(serviceName: "http://yourAPIURL", parameters: params, completionHandler: { (response:JSON?, error:NSError?) in 
     //Handle response  
     }) 
    } else { 
     print("Image problem") 
    } 
} 
+0

예, 해결되었습니다. 매개 변수 2 개를 놓치고 인코딩했습니다. 많은 감사합니다. –

관련 문제