我正在尝试使用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代码。 感谢任何帮助。
答案 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(()))
}
}
}
})