2017-02-12 110 views
0

我有一個關於使用Alamofire將圖像上傳到API服務器的問題。使用Alamofire將圖像上傳到API服務器

的BaseURL:http://vietnamtravelguide-app.com/quangnam/api_inquangnam/tips/create?user_id= 「」 &令牌= 「」 3個參數:LOCATION_ID,內容,imageName

這是確定由郵差

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) 
      } 

      }) 
帶有圖像的

(從參數強制轉換爲圖像的圖像)。當我調試它,我得到response.result返回失敗

回答

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個參數,並編碼它。非常感謝。 –

相關問題