如何在swift中使用alamofire上传画廊图片



我想在swift中使用AlamofireimagePickerController上传图像。我有两个函数,一个用于原始api调用,即ApplyLeave,另一个用于图像上传,即imageUploadrequestWith。在ApplyLeave函数中,有一个我想传递给上传的图像参数是leave_certificate: gfg,这个leave_certificate参数应该是上传图像的参数。我有用于图像上传的seprete函数,如何在ApplyLeave函数中使用它作为参数,我在seprete类中有imagePickerController。我真的很困惑如何使用这个以及如何合并所有的东西。请看我的以下代码。

class APIserviceprovider {
static func ApplyLeave (
startDate:String,
endDate:String,
description:String,
reason:String,
completion:@escaping (_ isSuccesfull :Bool, _ errorMessage :String?) ->()
) {
guard let company_id = UserDefaults.standard.value(forKey: KeyValues.companyidKey) else {return}
guard let user_id = UserDefaults.standard.value(forKey: KeyValues.userIdkey) else {return}
guard let workspace_id = UserDefaults.standard.value(forKey: KeyValues.workspaceIdKey) else {return}
let urlString = "(ApiServiceProvider.BASE_URL + ApiServiceProvider.APPLY_LEAVE)"
let parameters = [
"leave_start_date": "(startDate)",
"leave_end_date": "(endDate)",
"leave_reason": "(reason)",
"leave_description": "(description)",
"user_id": "(user_id)",
"workspace_id": "(workspace_id)",
"company_id": "(company_id)" ,
"leave_certificate": "gfg"
]
print(parameters)
Alamofire.request(urlString, method:.post, parameters: parameters, encoding: URLEncoding.default).validate().responseJSON
{
response in
switch response.result {
case .failure(let error):
//completion(false, "Failed to Sign up")
print(error)
completion(false, "You failed to apply for leave.")
case .success(let responseObject):
//print("response is success:  (responseObject)")
completion(true, "You have successfully appplied for leave.")
if let JSON = response.result.value {
let result = JSON as! NSDictionary
print(result)
}
}
}
}

static func imageUploadrequestWith(
endUrl: String,
imageData: Data?,
parameters: [String : Any],
onCompletion: ((JSON?) -> Void)? = nil,
onError: ((Error?) -> Void)? = nil
) {
let url = "(ApiServiceProvider.BASE_URL + ApiServiceProvider.APPLY_LEAVE)"
let headers: HTTPHeaders = [
/* "Authorization": "your_access_token",  in case you need authorization header */
"Content-type": "multipart/form-data"
]
Alamofire.upload(multipartFormData: { (multipartFormData) in
for (key, value) in parameters {
multipartFormData.append("(value)".data(using: String.Encoding.utf8)!, withName: key as String)
}
if let data = imageData{
multipartFormData.append(data, withName: "image", fileName: "image.png", mimeType: "image/png")
}
}, usingThreshold: UInt64.init(), to: url, method: .post, headers: headers) { (result) in
switch result{
case .success(let upload, _, _):
upload.responseJSON { response in
print("Succesfully uploaded")
if let err = response.error{
onError?(err)
return
}
onCompletion?(nil)
}
case .failure(let error):
print("Error in upload: (error.localizedDescription)")
onError?(error)
}
}
}
}
class ApplyLeaveController: UIViewController, UITextFieldDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate {
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField == self.uploadFileButton {
let myPickerController = UIImagePickerController()
myPickerController.delegate = self;
myPickerController.sourceType =  UIImagePickerControllerSourceType.photoLibrary
self.present(myPickerController, animated: true, completion: nil)
}
}
@objc func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
let image_data = info[UIImagePickerControllerOriginalImage] as? UIImage
let imageData:Data = UIImagePNGRepresentation(image_data!)!
let imageStr = imageData.base64EncodedString()
uploadFileButton.text = imageStr
self.dismiss(animated: true, completion: nil)
}
}

拾取图像后,在didFinishPickingMediaWithInfo中调用Api,如下

var currentSelectedImage = UIImage()
public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
self.currentSelectedImage = image
var parameters = [String:String]()
let parameters = [
"leave_start_date": "(startDate)",
"leave_end_date": "(endDate)",
"leave_reason": "(reason)",
"leave_description": "(description)",
"user_id": "(user_id)",
"workspace_id": "(workspace_id)",
"company_id": "(company_id)" ,
"leave_certificate": "gfg"
]
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(UIImageJPEGRepresentation(self.currentSelectedImage, 0.5)!, withName: "image", fileName: "image.png", mimeType: "image/jpeg")
for (key, value) in parameters {
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
}
}, to: "your url",
headers: nil)
{ (result) in
switch result {
case .success(let upload, _, _):
upload.uploadProgress(closure: { (Progress) in
print("Upload Progress: (Progress.fractionCompleted)")
})
upload.responseJSON { response in
if let JSON = response.result.value {
print("JSON: (JSON)")
}
}
case .failure(let encodingError):
print(encodingError)
}
}
} else {
}
dismiss(animated: true, completion: nil)
}

最新更新