2016-07-17 2 views
0

Alamofire를 사용하여 서버 요청을하려고합니다. 파일을 매개 변수로 보내야합니다.AlamoFire를 사용하여 POST 요청에서 jpeg 파일을 매개 변수로 보내는 방법

Alamofire.request(.POST, apiURL, parameters: parameters).responseJSON { response in 

    } 

이 요청이 때 만 작동합니다

var parameters: [String: AnyObject] = [:] 
    parameters["PAYLOAD"] = payloadString // String 
    parameters["FINGERPRINT"] = deviceUniqueIdString // String 

은 내가 요청을 보낼 UIImageJPEGRepresentation()

let imageData = UIImageJPEGRepresentation(myUIImage, 1.0) 
    parameters["IMAGE_FILE"] = imageData 

그런 다음, 나는 Alamofire을 사용을 사용을 NSData로 변환있는 UIImage가 페이로드 및 지문 매개 변수를 보내지 만 "IMAGE_FILE"매개 변수를 포함하면 서버가 오류를 반환합니다.

UIImage는 어떻게 보내야합니까?

답변

1

@Fujia 응답 외에도 예제를 추가하고 싶습니다. 이것은 최근에 png 파일을 게시 할 때 사용했던 방법입니다.

func WasperEntrepriseImageUploadCall(method: Alamofire.Method, imageData: NSData, parameters: [String: AnyObject]?, headers: [String: String]?, urlToPost: String, 
    progressionHandler: (bytesWritten: Int, totalBytesWritten: Int, totalBytesExpected: Int) ->(), 
    completionHandler: (NSURLRequest?, NSHTTPURLResponse?, Result<AnyObject,NSError>, NSData?) ->()){ 

    Alamofire.upload(
     method, urlToPost, headers: headers, 
     multipartFormData: { multipartFormData in 
      multipartFormData.appendBodyPart(data: imageData, name: "file", fileName: "doesntmatter", mimeType: "image/png") 

      if let params = parameters{ 
       for (key, value) in params { 
        multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key) 
       } 
      } 
     }, 
     encodingCompletion: { encodingResult in 
      switch encodingResult { 
      case .Success(let upload, _, _): 

       upload.progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in 
        progressionHandler(bytesWritten: Int(bytesWritten), totalBytesWritten: Int(totalBytesWritten), totalBytesExpected: Int(totalBytesExpectedToWrite)) 
       } 
       upload.response { response in 
              }.validate() 
        .responseJSON { response in 

         if let resp = response.response{ 
          print(resp.statusCode) 
          print(response.result.value) // result of response serialization       
         } 
         completionHandler(response.request,response.response,response.result, response.data) 
       } 
      case .Failure(let encodingError): 
       print(encodingError) 
      } 
     } 
    ) 
} 

가장 좋은 해결책은 아니지만 가장 먼저 시작해야합니다. 내가 믿는 SwiftyJSON과 Alamofire 3.0이 필요합니다. 유용하게 사용할 수있는 진행을위한 완료 처리기를 제공합니다. 여기에서 자세한 답변을 찾을 수 있습니다. Uploading file with parameters using Alamofire

1

Alamofire.request 대신 Alamofire.upload(_:multipartFormData:encodingMemoryThreshold:encodingCompletion:)을 사용하십시오. mutipart 클로저에 매개 변수 (문자열과 데이터 모두 포함)를 추가 할 수 있습니다.

관련 문제