2017-02-12 68 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个参数,并编码它。非常感谢。 –

相关问题