这是实现本地web服务器POST处理程序的代码。它在服务器上以NSData(请求为!GCDWebServerURLEncodedFormRequest).data)的形式下载歌曲,该格式是从客户端设备上传的。
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)
该方法在服务器端成功接收到歌曲文件的NSData。接收到的数据的大小与发送的实际文件相对应当尝试播放接收到的歌曲时,它只播放其中的一部分,然后停止播放但是,应用程序作为一个整体不会崩溃。
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)
})
上述所有方法都是在AppDelegate.swift中执行的,并且是在后台线程中执行的。我们非常感谢为解决这一问题提供的任何帮助。谢谢
问题很可能是AVAudioPlayer
实例不在身边,因为它位于局部变量中。当调用return GCDWebServerDataResponse(HTML:html)
时,局部变量和播放器被销毁。