以下は、ローカル Web サーバーの POST ハンドラーが実装されているコードです。クライアントデバイスからアップロードされたサーバーで NSData( (request as! 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 で実行され、バックグラウンド スレッドで実行されます。問題を解決するための助けをいただければ幸いです。ありがとう..!!