Reputation: 2662
I want to upload and audio file with using Alamofire
. I see other questions which are telling to use Multipart request to do that
Here is the example i got form other question :
Alamofire.upload(
multipartFormData: { multipartFormData in
multipartFormData.append(audioRecorder?.url, withName: "iosTest.mp3")
//**this "withName:" is it the name of the file?
},
to: "https://yourLinkGoesHere",
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
}
case .failure(let encodingError):
print(encodingError)
}
}
)
So when i look at an example above and i did not get a few points to understand.
1) what is "withName:" in this part multipartFormData.append(audioRecorder?.url, withName: "iosTest.mp3")
above? Is it an audio file name in iphone device?
2) Where can i set parameters and headers?
Cause in normal request what i do is like this :
let headers : HTTPHeaders = ["Authorization" : apiKey]
let params : [String : Any] = ["my_param" : myParams]
Alamofire.request(My_URL!, method: .post, parameters: params, encoding: URLEncoding.httpBody, headers: headers).responseJSON {
response in
switch response.result {
So in multipart where should i specific headers and params? Please give some example for multipartFromData.append
part.This part is quite confusing for me.
Thanks.
Upvotes: 2
Views: 4478
Reputation: 1105
Hi im using this code to upload song image and m4a file to my server . Hope this work for you.
func call_Api_Add_PostWithImage(_ uploadImage:UIImage, _ songName:String, _ songData_:NSData,_ text:String)
{
self.slider_progress.value = 0
self.slider_progress.isHidden = false
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyyMMddhhmmss"
let dateString = dateFormatter.string(from: NSDate() as Date)
let imgName = "\(dateString)_SM_POST.png"
let profileId = AppConfig.USER_ID == parentVC.profile_id ? AppConfig.USER_ID : parentVC.profile_id
var param = API_KEYS.post_dict
param["userid"] = AppConfig.USER_ID
param["profile_id"] = profileId
param["posttype"] = "4"
param["parentpost"] = "0"
param["description"] = txt_message
param["image"] = ""
param["source"] = "1"
param["title"] = ""
param["info"] = songJsonString
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(UIImageJPEGRepresentation(uploadImage, 0.5)!, withName: "audio_banner", fileName: imgName, mimeType: "image/jpeg")
multipartFormData.append(songData_ as Data, withName: "audio", fileName: songName, mimeType: "audio/m4a")
for (key, value) in param {
multipartFormData.append(value.data(using: String.Encoding.utf8)!, withName: key)
}
}, to: API_POST_ADD_POST)
{ (result) in
switch result {
case .success(let upload, _, _):
upload.uploadProgress(closure: { (Progress) in
print("Upload Progress: \(Progress.fractionCompleted)")
DispatchQueue.main.async {
self.slider_progress.setValue(Float(Progress.fractionCompleted), animated: true)
}
})
upload.responseJSON { response in
if let JSON = response.result.value {
print("Response : ",JSON)
if let dictJson = JSON as? NSDictionary
{
let checkResult = dictJson[successKey] as? Int ?? 0
if checkResult == 1
{
if let valueData = dictJson[resKey] as? NSDictionary
{
if let objeResponse = UserPostModel(dictionary: valueData)
{
self.parentVC.arr_userPosts.insert(objeResponse, at: 0)
DispatchQueue.main.async {
self.showSuccessPopup()
self.parentVC.tbl_profile_info.reloadData()
}
}
}
}
}
}
DispatchQueue.main.async {
self.slider_progress.value = 0
self.slider_progress.isHidden = true
}
}
case .failure(let encodingError):
print(encodingError)
DispatchQueue.main.async {
self.slider_progress.value = 0
self.slider_progress.isHidden = true
}
}
}
}
Upvotes: 1