2010-11-18 5 views
0

私はwavファイルを返さなければならないWebサービスを使用しています。結果をNSDataオブジェクトに取り込み、それをローカルドキュメントディレクターに保存します。NSDataファイルタイプの検証

保存する前にデータが本当にwavであることを確認するにはどうすればよいですか?サーバー上にエラーがあった場合、HTMLガーベジの長い文字列を返す可能性があります。

ありがとうございます!

NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:RequestURL 
                 cachePolicy:NSURLRequestUseProtocolCachePolicy 
                timeoutInterval:30.0]; 

NSHTTPURLResponse* response = nil; 
NSData *soundData = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error]; 

//save voicemail file locally 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSString *destPath = [documentsDirectory stringByAppendingPathComponent:@"returned.wav"]; 
[fileManager createFileAtPath:destPath contents:soundData attributes:nil]; 

答えて

2

これを行うための2つの方法があります(そのうちの一つがあなたのために受け入れられることを願っています):すべてがある場合

1)、(200と同じでなければなりません(NSIntegerを入力)NSHTTPURLResponseさんからstatusCodeをチェック)[OK]を、

2))私は間違っていないよ場合は、 "オーディオ/ vnd.wave" @でなければなりません(NSHTTPURLResponseのMIMEタイプ(タイプNSStringの*)をチェック

+0

1サーバからのエラー応答を持っている必要があります400または500の範囲の応答。 – JeremyP

+0

要求がサーバーの観点から「成功」する可能性があるため、MIMEタイプのチェックが理想的です。ありがとうございました! – mojo

+0

最終コード: NSHTTPURLResponse * response = nil; \t NSData * soundData = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error]; //ボイスメールファイルをローカルに保存する NSDictionary * headers = [response allHeaderFields]; NSString * contentType =(NSString *)[headers objectForKey:@ "Content-Type"]; if([contentType isEqual:@ "audio/x-wav"]) \t NSLog(@ "これはwavファイルです!"); else \t NSLog(@ "予期しない応答の種類:%@"、contentType); – mojo

関連する問題