2010-11-18 20 views
0

Je consomme un service Web qui devrait renvoyer un fichier wav. Je capture le résultat dans un objet NSData et l'enregistre dans le directeur des documents locaux. Comment puis-je vérifier que les données sont bien un wav avant de les sauvegarder? S'il y avait une erreur sur le serveur, il peut renvoyer une longue chaîne d'ordures HTML.Validation du type de fichier NSData

Merci!

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]; 

Répondre

2

Il y a 2 façon de le faire (l'espoir que l'un d'entre eux sera acceptable pour vous):

1) vérifier statusCode de NSHTTPURLResponse (type NSInteger) (doit être égale à 200, si tout est ok),

2) vérifier le type MIME de NSHTTPURLResponse (type NSString *) (si je ne me trompe pas, devrait être @ "audio/vnd.wave")

+0

+1 une réponse d'erreur d'un serveur doit avoir une réponse dans la gamme 400 ou 500. – JeremyP

+0

Parce que la requête peut être "réussie" du point de vue du serveur, la vérification du type MIME est le moyen idéal. Je vous remercie! – mojo

+0

Code définitif: NSHTTPURLResponse * réponse = néant; \t NSData * soundData = [NSURLConnection sendSynchronousRequest: demande returnResponse: & erreur de réponse: & erreur]; // sauvegarder le fichier de messagerie vocale localement NSDictionary * headers = [response allHeaderFields]; NSString * contentType = (NSString *) [en-têtes objectForKey: @ "Content-Type"]; if ([contentType estEqual: @ "audio/x-wav"]) \t NSLog (@ "c'est un fichier wav!"); else \t NSLog (@ "type de réponse inattendue:% @", contentType); – mojo