5
votes

Télécharger l'image à l'aide de SDWebImage, erreur -999 (ou) SDWebImageErrorDomain Code = 0 "L'image téléchargée a 0 pixels

Je ne parviens pas à télécharger l'image en Objective c En utilisant la version SDWebImage 4.4.5., J'ai essayé ce qui suit, rien n'a fonctionné.

Essayez 1:

[self.thumbnailImageView setImageWithURL:[NSURL URLWithString:thumbnailURLString]
                            placeholderImage:nil
                                   completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
                                       if (image != nil){
                                           self.thumbnailImageView.image = [self imageResizingToAspetRatio:image];

                                       }
                                   }];

}];

Essayez 2:

SDWebImageDownloader *manager = [SDWebImageManager sharedManager].imageDownloader;
        [manager setValue:@"application/vnd.learning.events.v1+json" forHTTPHeaderField:@"Accept"];
        [manager setValue:@"en-US" forHTTPHeaderField:@"Accept-Language"];
        [manager setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
        //[manager setValue:savedEmail forHTTPHeaderField:@"Email"];
        [manager setValue:savedToken forHTTPHeaderField:@"Authorization"];
        [manager downloadImageWithURL:[NSURL URLWithString:thumbnailURLString] options:SDWebImageDownloaderHighPriority progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
        } completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {
            self.thumbnailImageView.image = image;
        }];

Essayez 3:

SDWebImageManager *manager = [SDWebImageManager sharedManager];

        [manager loadImageWithURL:[NSURL URLWithString:thumbnailURLString] options:SDWebImageDelayPlaceholder progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {
        } completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) {

        }];

Essayez 4:

[[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:thumbnailURLString] options:SDWebImageDownloaderUseNSURLCache progress:nil completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {


        }];

Essayez 5:

[self.thumbnailImageView sd_setImageWithURL:[NSURL URLWithString:thumbnailURLString] placeholderImage:nil options:SDWebImageRefreshCached completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { if(image != nil){
            self.thumbnailImageView.image = image;                
        } else {
            NSLog(@"Photo Not Available, fetch");
            [self.thumbnailImageView sd_setImageWithURL:[NSURL URLWithString:thumbnailURLString] placeholderImage:nil options:SDWebImageRefreshCached completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
                if(image != nil) { NSLog(@"Lo Res Image Loaded by %ld from '%@'", (long)cacheType, imageURL);
                    self.thumbnailImageView.image = image;

                } else {
                    self.thumbnailImageView.image = nil;

                } }];

        } }];

Dans tous les cas ci-dessus, obtenez l'erreur suivante:

Domaine d'erreur = NSURLErrorDomain Code = -999 "annulé" UserInfo = {NSErrorFailingURLStringKey = https : //thisisnotcorrecturl.net/api/BAImage? ActionFlagId = 97 & id = 615 , NSErrorFailingURLKey = https://thisisnotcorrecturl.net/api/BAImage?ActionFlagId=97&id=615 , _NSURLErrorRelatedURLSessionTaskErrorKey = ( "LocalDataTask . " ), _NSURLErrorFailingURLSessionTaskErrorKey = LocalDataTask . , NSLocalizedDescription = annulé}

Auparavant, nous utilisions la version v3.5.4 utilisée, capable de télécharger l'image avec le code suivant. Cela fonctionne bien.

[self.thumbnailImageView sd_setImageWithURL:[NSURL URLWithString:thumbnailURLString] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {

Veuillez me faire savoir si vous avez fait une erreur ou si vous avez des suggestions.

Mise à jour 1: J'ai essayé de télécharger l'image en utilisant post man. Veuillez vérifier l'image. La même URL d'image fonctionne sur SDWebImage v3.5.4 après la mise à niveau vers SDWebImage v4.4.5, elle ne contient pas l'image.

Y a-t-il des configurations qui me manquent? Pod installé 'SDWebImage / WebP' également, ajouté SD_WEBP = 1 dans les paramètres de construction -> Macros de préprocesseur.

Erreur: Error Domain = SDWebImageErrorDomain Code = 0 "L'image téléchargée a 0 pixels" UserInfo = {NSLocalizedDescription = L'image téléchargée a 0 pixels}

 entrez la description de l'image ici

http://testingurl.net/api/Image?ActionFlagId=20&id=864

Autorisation: Courriel: kkk1@ler.com, Jeton: A-BE3D-WER3-847F-ER6YG5678G


0 commentaires

4 Réponses :


1
votes

Commencez par mettre à jour le pod et essayez SDWebImage pod version 3.8.2.

Et la deuxième chose est de vérifier l'URL de votre image. car je teste personnellement le téléchargement d'images avec cette version du pod et la fonctionnalité de téléchargement fonctionne.


3 commentaires

J'ai mis à jour les pods. Je dois utiliser la dernière SDWebImage au lieu de 3.8.2. J'ai essayé de télécharger l'url de l'image " i0.wp.com/nmm-izhevsk.ru/wp-content/uploads/2015/06/... "Cela fonctionne bien avec les URL des images réelles. Mais, lorsque j'ai essayé de télécharger l'image à partir de l'URL de notre serveur, cela ne charge pas l'image. La même chose fonctionne sur les anciennes versions.


Il n'y a aucun problème avec la bibliothèque SDWebImage, le problème avec le serveur. Lorsque vous travaillez avec l'URL de votre image, obtenez le code d'erreur 503. Ce qui signifie "Service 503 non disponible. Le serveur est actuellement incapable de traiter la demande en raison d'une surcharge temporaire ou d'une maintenance du serveur"


Ceci est la solution du problème de votre serveur stackoverflow.com/questions/28184194/...



4
votes

Fondamentalement, SDWebImage n'a aucun problème pour les télécharger à partir de n'importe quelle URL si l'URL contient une image.

Mais dans votre cas, vous avez essayé d'obtenir une image de JSON. L'API de votre serveur renvoie un objet JSON qui contient l'image sous la forme base64String . Lorsque vous obtenez la réponse JSON, vous devez obtenir le base64String de json, puis créer une image à partir de la base64String .

Vous pouvez utiliser cette méthode pour décoder une chaîne en image en utilisant Objective C .

- (UIImage *)decodeBase64ToImage:(NSString *)strEncodeData {
  NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters];
  return [UIImage imageWithData:data];
}


10 commentaires

Je suis d'accord avec vous, SDWebImage n'a aucun problème. Je peux télécharger l'image si nous utilisons NSURLSession, puis nous pouvons analyser le JSON pour l'image. Mais, sans ce processus, nous pouvons afficher l'image à l'aide de SDWebImage uniquement. Mais, après la mise à niveau, il ne télécharge pas l'image. Obtenir une erreur.


Si le serveur est sous votre contrôle, obtenez l'URL de l'image en tant que réponse au lieu de renvoyer base64String. J'espère que cela aidera à charger l'image en utilisant facilement SDWebImage.


Nous ne pouvons pas obtenir l'url de l'image directement, car nous enregistrons l'image au format octets dans DB.


Comme vous l'avez dit, vous devez enregistrer les octets de données dans la base de données, vous pouvez utiliser l'appel d'API pour obtenir la réponse, puis afficher l'image à partir de la chaîne de données.


oui, nous pouvons le faire. La même URL fonctionne dans SDWebImage v3.5.4 mais pas dans v4.4.5. J'examine ceci, au lieu d'aller avec des alternatives. Quel pourrait être le problème du chargement de l'image en utilisant la même URL d'image.


Ce sera la bonne manière. Peut-être que SDWebImage mettra à jour la fonctionnalité ou supprimera d'une manière ou d'une autre la fonctionnalité.


Ouais. Nous ne sommes pas sûrs.


continuons cette discussion dans le chat .


ça marche, Ajouté pour convertir l'image de réponse dans SDWebImageDownloaderOperation. Une fois que j'ai reçu la réponse, convertie en image et attribuée à la même chose.


Ajout du code suivant dans "SDWebImageDownloaderOperation.m" Nom de la méthode: ....... "- (void) URLSession: (NSURLSession *) session task: (NSURLSessionTask *) task didCompleteWithError: (NSError *) error" ... .......... Le code est: ...... NSDictionary * responseObject = [NSJSONSerialization JSONObjectWithData: options self.imageData: 0 erreur: nil]; if (! [[responseObject objectForKey: @ "Value"] isEqual: [NSNull null]] && [responseObject objectForKey: @ "Value"]) {self.imageData = [[NSData alloc] initWithBase64EncodedString: [responseObject objectForKey: @ "Value "] options: 0]; }



0
votes

Si vous souffrez d'un tel problème de type avec la bibliothèque SDWebImage, vous pouvez également en utiliser une autre qui prend en charge l'objet de chaîne base64

L'une des meilleures bibliothèques que j'ai trouvées est " Kingfisher "

J'espère que cela vous plaira et que cela résoudra votre problème.


0 commentaires

1
votes

J'ai rencontré le même problème et j'essayais des images webP. J'ai réalisé plus tard que je devais ajouter un codeur webP à SDImageCodersManager. Quelque chose comme

SDImageCodersManager.shared.addCoder(SDImageWebPCoder.shared)

J'ai fait ça dans AppDelegate.


0 commentaires