2016-10-01 80 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) 
}