使用Alamofire上传音频文件

3

我正在尝试使用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代码,将不胜感激。任何帮助都会被赞赏。

你能分享一下崩溃日志吗? - ayon.gupta
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(()))
                }
            }
        }

    })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接