2010-10-31 19 views
1

Je veux vérifier les dates sur les fichiers - zip, jpg ou autre - sur mon serveur et, si elles sont plus récentes que les copies sur mon iPhone, pour les télécharger.problèmes avec le code iphone pour vérifier la date du fichier serveur

J'ai écrit la méthode suivante basée sur un post ici qui date d'environ un an. Il a deux problèmes:

+ (NSString *) f_GetServerFileDate:(NSString *)MyURL { 
    NSURL *oURL = [NSURL URLWithString:MyURL]; 
    NSURLRequest *oRequest = [NSURLRequest requestWithURL:oURL]; 
    NSHTTPURLResponse *oResponse; 
    [NSURLConnection sendSynchronousRequest:oRequest returningResponse:&oResponse error:nil]; 
    if ([oResponse respondsToSelector:@selector(allHeaderFields)]) { 
     NSDictionary *metaData = [oResponse allHeaderFields]; 
     return [metaData objectForKey:@"Last-Modified"]; 
    } else { 
     return @"00000000"; 
    } 
} 

Problème 1: Il retourne "00000000" quand donné "http://www.mysite.com/myzip.zip" comme une URL. Problème 2: Pour une page Active Server (juste un test, pas que j'en téléchargerais vraiment un), elle renvoie une date qui n'a aucune incidence sur la date à laquelle le fichier a été téléchargé ou modifié pour la dernière fois.

Quelle est la bonne façon?

Répondre

1

Ceci est probablement moins un problème de votre code iPhone mais plutôt du serveur web. Un serveur Web n'est pas nécessaire pour inclure l'attribut d'en-tête Last-Modified. Et pour les pages dynamiques (telles que les pages ASP), il est correct de renvoyer la date à laquelle la page a été générée dynamiquement (c'est-à-dire la date actuelle) et non la date à laquelle la page a été développée ou déployée.

Je vous suggère d'utiliser une extension de navigateur telle que en-têtes HTTP Live pour Fireofx afin d'observer les attributs d'en-tête HTTP renvoyés par le serveur Web. Si la date est manquante, vous n'aurez pas de chance (à moins que vous n'ayez accès au serveur Web et que vous puissiez y remédier).

En outre, votre code téléchargera toujours l'image, peu importe quand elle a été modifiée pour la dernière fois. Vous pouvez empêcher cela si vous incluez l'en-tête HTTP If-Modified-Since dans votre demande. De cette façon, le serveur Web enverra l'image si elle a été modifiée depuis la date spécifiée ou simplement envoyer un code de résultat 304 (non modifié) si l'image est toujours à jour. Mais encore une fois: Cela dépend du serveur Web si cette option est prise en charge et ne fonctionne que pour le contenu statique, sauf si l'auteur de l'application Web l'a spécifiquement implémenté.