【问题标题】:How to upload audio with Alamofire multipart upload?如何使用 Alamofire 分段上传上传音频?
【发布时间】:2018-08-09 09:41:08
【问题描述】:

我想使用Alamofire 上传音频文件。我看到其他问题告诉使用 Multipart 请求来做到这一点

这是我从其他问题中得到的示例:

 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)
        }
    }
)

所以当我看上面的一个例子时,我并没有明白几点。

1) 上面这部分multipartFormData.append(audioRecorder?.url, withName: "iosTest.mp3") 中的“withName:”是什么?它是iphone设备中的音频文件名吗?

2) 我在哪里可以设置参数和标题?

因为在正常请求中我所做的是这样的:

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 {

那么在多部分中,我应该在哪里指定标题和参数?请为multipartFromData.append 部分提供一些示例。这部分让我很困惑。
谢谢。

【问题讨论】:

    标签: ios alamofire swift4


    【解决方案1】:

    嗨,我正在使用此代码将歌曲图像和 m4a 文件上传到我的服务器。 希望这对你有用。

    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
                    }
                }
    
            }
        }
    

    【讨论】:

    • bro withName: in `multipartFormData.append` 只是我们服务器中参数的关键??比如“audioParams : myAudioFile.m4a”所以withName: audioParams是这样的吗??
    • @ken 是的,audio_banner audio 这是 api 中的参数
    • 好的不错..我想我明白了这部分..但是我可以知道在你的代码中在哪里声明标题吗??
    • 像这样let headers : HTTPHeaders = ["Authorization" : apiKey] 在你的代码中包含在哪里??
    • @ken 看看this
    猜你喜欢
    • 2019-12-06
    • 2017-01-28
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 2018-11-02
    • 2017-02-16
    相关资源
    最近更新 更多