ios - 使用 Alamofire 上传音频文件

标签 ios json swift xcode alamofire

我正在尝试使用 Alamofire 从 TableView 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 代码。 感谢任何帮助。

最佳答案

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

    })

关于ios - 使用 Alamofire 上传音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57248190/

相关文章:

iphone - didUpdateLocations 会在稳定手机上调用还是现在调用?

ios - 将 MPVolumeView slider 拇指位置设置为设备音量

ios - 是否可以从 Websheet.app 内部打开到 Safari 的链接

ios - 我应该将密码保存在共享的网络凭据和(本地)钥匙串(keychain)中吗

java - REST GET API 调用期间的字符编码

javascript - 根据数组中的键连接并删除一些 json 元素

c# - 如何以编程方式在 Stackdriver 中将 NLog 与 JsonPayload 结合使用

ios - 如何将这个 objective-c 转换为 swift

ios - FMDB:NULL 值被检索为空字符串

SWIFT 对具有特定对象的不同对象集合的单元格进行排序