2016-10-01 85 views
7

我做下面的上傳PNG文件與參數:Alamofire 4上傳與參數

Alamofire.upload(
     multipartFormData: { multipartFormData in 
      multipartFormData.append(UIImagePNGRepresentation(tempImage!)!, withName: "file", fileName: "picture.png", mimeType: "image/png") 

      // Send parameters 
      multipartFormData.append((UserDefaults.standard.value(forKey: Email) as! String).data(using: .utf8)!, withName: "email") 
      multipartFormData.append("png".data(using: .utf8)!, withName: "type") 

     }, 
     to: "user/picture", 
     encodingCompletion: { encodingResult in 
      switch encodingResult { 
      case .success(let upload, _, _): 
       upload.responseJSON { response in 
        debugPrint("SUCCESS RESPONSE: \(response)") 
       } 
      case .failure(let encodingError): 
       self.removeSpinnerFromView() 
       print("ERROR RESPONSE: \(encodingError)") 

      } 
     } 
    ) 

問題是,我的服務器上我沒有看到emailtype表單字段。我遵循這個網上發佈的例子。有什麼我應該做不同的做法嗎?

編輯

如果我刪除,我把部分:

multipartFormData.append(UIImagePNGRepresentation(tempImage!)!, withName: "file", fileName: "picture.png", mimeType: "image/png") 

那麼參數都包括在內。否則,我認爲這是Alamofire 4.0.1中的一個錯誤。

+0

請響應。 –

回答

29

它在我身邊很好地工作。

我使用下面的代碼:

let parameters = [ 
      "file_name": "swift_file.jpeg" 
     ] 

Alamofire.upload(multipartFormData: { (multipartFormData) in 
      multipartFormData.append(UIImageJPEGRepresentation(self.photoImageView.image!, 1)!, withName: "photo_path", fileName: "swift_file.jpeg", mimeType: "image/jpeg") 
      for (key, value) in parameters { 
       multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key) 
      } 
      }, to:"http://sample.com/upload_img.php") 
    { (result) in 
     switch result { 
     case .success(let upload, _, _): 

      upload.uploadProgress(closure: { (progress) in 
       //Print progress 
      }) 

      upload.responseJSON { response in 
       //print response.result 
      } 

     case .failure(let encodingError): 
       //print encodingError.description 
     } 
    } 
+0

in for(key,value)in參數,是值類型'AnyObject'? – Cruz

+0

@SwiftyCruz是的。 –

+0

@MicroR它在我身邊很好地工作。這可能是後端問題。 –

0

如果你的價值是任何類型的,你可以改變它像這樣

for (key, value) in params { 
    let paramsData:Data = NSKeyedArchiver.archivedData(withRootObject: value) 
    formData.append(paramsData, withName: key) 
}