Hier ist der Code, in dem der POST-Handler für den lokalen Webserver implementiert ist. Es lädt das Lied in der Form von NSData ((Anfrage als! GCDWebServerURLEncodedFormRequest) .data) auf dem Server herunter, der von dem Client-Gerät hochgeladen wird.Abspielen empfangener NSData von einer HTTP-POST-Anfrage mit AVAudioPlayer
webServer.addHandlerForMethod("POST",path:"/", requestClass: GCDWebServerURLEncodedFormRequest.self, processBlock:
{request in
let html: String = String(format: "<html><body><p>hi</p></body></html>")
NSLog("Request Args %hhd bkmbk", (request as! GCDWebServerURLEncodedFormRequest).hasBody())
NSLog("Request Args %@ bkmbk", (request as! GCDWebServerURLEncodedFormRequest).contentType)
Mit dieser Methode wird NSData der Song-Datei erfolgreich auf der Serverseite empfangen. Die Größe der empfangenen Daten entspricht der tatsächlich gesendeten Datei. Wenn der empfangene Song versucht wird abzuspielen, spielt er nur einen Teil davon ab und stoppt dann. Die Anwendung als Ganzes stürzt jedoch nicht ab.
do{
print((request as! GCDWebServerURLEncodedFormRequest).data.length)
let player = try AVAudioPlayer(data: (request as! GCDWebServerURLEncodedFormRequest).data, fileTypeHint: "mp3")
player.prepareToPlay()
player.play()
}catch{
// ...
}
return GCDWebServerDataResponse(HTML:html)
})
Alle Verfahren, die oben in AppDelegate.swift durchgeführt und sind in einem Hintergrund-Thread ausgeführt wird. Jede Hilfe zur Lösung des Problems wird sehr geschätzt. Vielen Dank..!!