2012-03-25 5 views
3

Ich habe eine iPhone-App, die Fotos nach Bedarf herunterladen wird, die funktioniert gut, aber hin und wieder die Dateien werden beschädigt gespeichert und nur ein Teil des Bildes wird angezeigt, der Rest wird in grau angezeigt. Zum Beispiel sind die oberen 25% das tatsächliche Bild und die unteren 75% sind grau.Wie kann ich prüfen, ob das heruntergeladene Bild in der iOS App beschädigt ist oder nicht?

Hier ist mein Code zum Herunterladen der Bilder, ich nahm an, ein Antwortcode von 200 bedeutete, dass die Requests ordnungsgemäß abgeschlossen wurde.

ASIHTTPRequest *requestl = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:URLLarge]]; 
     [requestl startSynchronous]; 
     if ([requestl responseStatusCode]==200) { 
      NSData *responseData = [requestl responseData]; 
      NSError *writeError = nil; 
      [responseData writeToFile:savePathLarge options:NSDataWritingFileProtectionNone error:&writeError]; 
      if (writeError !=nil) { 
       NSLog(@"\n\n Write returned error: %@ \n\n", [writeError localizedDescription]); 
      } 
} 

Von diesem [https://stackoverflow.com/questions/5699645/can-i-check-if-downloaded-image-is-corrupt-or-not-before-saving] Frage heißt es, dass, wenn ich in einem UIImageView dieses Bild versuchen und laden und nicht geladen dieses Bild beschädigt ist, aber meine Bilder werden in diesem korrupten Format ohne Probleme geladen werden, so dass Lösung nicht der Fall ist arbeite für mich.

+0

Haben Sie versucht, ['NSImage'] zu erstellen (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/ Classes/nsimage_Class/Reference/Reference.html) und ruft 'isValid' darauf auf? – dasblinkenlight

+0

Soweit ich weiß, wird keine der iOS-Image-APIs Ihnen helfen, wenn die Korruption subtil ist. Ich denke, Sie müssen sich den Download-Prozess ansehen und versuchen herauszufinden, wann der Download vorzeitig beendet wurde. Überprüfen Sie beispielsweise den Content-Length-Header und stellen Sie sicher, dass Sie alle Bytes erhalten. Leider weiß ich nicht genug über ASIHTTPRequest zu wissen, wie es Fehler und vorzeitige Beendigung behandelt. – EricS

+0

Stimmen Sie mit @EricS überein. Sie können überprüfen, ob es das Problem des Webdiensts ist, indem Sie die URLs beim Laden NSLoggen. Wenn Sie ein hässliches Bild sehen, kopieren Sie die geloggte URL in den Browser und sehen Sie, ob es dort schlecht aussieht. – danh

Antwort

1

Wenn diese Regelmäßigkeit auftritt, haben Sie wahrscheinlich Probleme beim Herunterladen des Images, oder der Server hat Probleme. Aber immer noch

Eine Möglichkeit besteht darin, einen MD5-Hash des Bildes auf dem Gerät zu generieren, und dann vergleichen Sie es mit dem Hash des Bildes auf dem Server gespeichert. Wenn sie nicht übereinstimmen, dann weißt du, dass etwas schief gelaufen ist.

Sie werden wahrscheinlich Ihren eigenen Server brauchen, um dies zu tun, Sie können einfach ein PHP-Skript schreiben, um dies für Sie zu tun (sollte Online-Führer sein), wäre es noch besser, wenn das Skript auf dem gleichen Server wie die Bilder wäre (aber Sie haben nicht erwähnt, ob es sich um Ihren eigenen Server handelt)