使用Alamofire上传音频文件

时间:2019-07-29 06:25:02

标签: ios json swift xcode alamofire

我正在尝试使用Alamofire从表视图UI将音频文件上传到服务器。

我的应用程序崩溃了,我想我在multipartformdata行中错误地连接了我的URL,请帮助我正确设置它。

@IBAction func Upload(_ sender: Any) {
    let voiceData = try? Data(contentsOf: getDirectory())
    let params : [String:String] = []

    Alamofire.upload(
        multipartFormData: { (multipartForm) in
            multipartForm.append(voiceData!, withName: "voice", fileName: "file", mimeType: "audio/m4a")
            for (key, value) in params {
                multipartForm.append(value.data(using: String.Encoding.utf8)!, withName: key)
            }
    },
        usingThreshold : SessionManager.multipartFormDataEncodingMemoryThreshold,
        to : "http://18.136.194.124/voupload.php",
        method: .post){ (result) in

            switch result {

'''''''
    }

func getDirectory() -> URL
    {
        let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        let documentDirectory = paths[0]
        return documentDirectory
    }


@IBOutlet weak var mtable: UITableView!
@IBOutlet weak var Butlabel: UIButton!
var recordingSession:AVAudioSession!
var audiorecorder:AVAudioRecorder!
var audioPlayer:AVAudioPlayer!
var numberOfrecords = 0


@IBAction func RecordButton(_ sender: Any) {

    if audiorecorder == nil
    {
        numberOfrecords += 1
        let filename = getDirectory().appendingPathComponent("\(numberOfrecords).m4a")


        let settings = [AVFormatIDKey: Int(kAudioFormatMPEG4AAC), AVSampleRateKey: 1200, AVNumberOfChannelsKey: 1, AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue]

        // VOXIT STARTS
        do
        {
            audiorecorder = try AVAudioRecorder(url: filename, settings: settings)
            audiorecorder.delegate = self
            audiorecorder.record()

            Butlabel.setTitle("Stop Recording", for: .normal)
        }
        catch{
            displayAlert(title: "Ups!", message: "Recording Failed")
        }

    }
    else
    {
        // STOP rec
    }
}

如果有人可以向我解释MultiDataForm代码。 感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

请尝试以下代码。

func jsonUploadRequest (url: String, parameters: [String : Any], completion: @escaping (Any) -> Void)
{
    let requestUrl = API_URLS.BASE_URL.rawValue + url
    let header = CommonMethods.getTokenURLHeader()

    Alamofire.upload(multipartFormData:{ (multipartFormData) in
        for (key, value) in parameters {
            multipartFormData.append((value as AnyObject).data(using: String.Encoding.utf8.rawValue)!, withName: key)
        }
        let voiceData = try? Data(contentsOf: getDirectory()
        multipartFormData.append(voiceData!, withName: "voice",fileName: "file.mp3", mimeType: "audio/m4a")

    },
                     usingThreshold:UInt64.init(),
                     to:requestUrl,
                     method:.post,
                     headers:header,
                     encodingCompletion: { (encodingResult) in
                        switch encodingResult {
                        case .success(let upload, _, _):
                            upload.responseJSON(completionHandler: { (response) in
                                completion(response.result.value!)
                            })
                        case .failure(let encodingError):
                            print(encodingError)
                            completion(encodingError)
                            break
                        }
    })
}

希望,它将为您提供帮助。

答案 1 :(得分:0)

Alamofire.upload(multipartFormData: { (multipartFormData) in
        multipartFormData.append(data, // the audio as Data
                                 withName: "Filedata",
                                 fileName: "file.m4a", // name of the file
                                 mimeType: "audio/mpeg")
    }, to: uploadUrl, encodingCompletion: { (result) in

        switch result {
        case .failure(let error):
            completion(.failure(Error you want to throw))
        case .success(let upload, _, _):
            upload.uploadProgress(closure: { (progress) in
                print("Upload Progress: \(progress.fractionCompleted)")
            })

            upload.responseJSON { response in
                if let error = response.error {
                    completion(.failure(Error you want to throw))
                } else {
                    completion(.success(()))
                }
            }
        }

    })
相关问题