ここに、ローカルWebサーバーのPOSTハンドラーが実装されているコードを示します。これは、クライアントデバイスからアップロードされたサーバ上で、NSData((GCDWebServerURLEncodedFormRequestとしての要求)形式)の形式でソングをダウンロードします。AVAudioPlayerを使用してHTTP POST要求からNSDataを受け取る
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で実行され、バックグラウンドスレッドで実行されます。 問題を解決するためのお手伝いをいたします。ありがとう.. !!