5

I am unable to download the image in Objective c Using SDWebImage 4.4.5 version., I tried the following , nothing worked.

Try 1:

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

}];

Try 2:

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

                } }];

        } }];

Try 3:

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


        }];

Try 4:

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) {

        }];

Try 5:

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

In all the above cases, getting the following error:

Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLStringKey=https://thisisnotcorrecturl.net/api/BAImage?ActionFlagId=97&id=615, NSErrorFailingURLKey=https://thisisnotcorrecturl.net/api/BAImage?ActionFlagId=97&id=615, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalDataTask <92586538-B07D-46FB-8694-3B29AA3F0CB4>.<7>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <92586538-B07D-46FB-8694-3B29AA3F0CB4>.<7>, NSLocalizedDescription=cancelled}

Earlier, we used v3.5.4 version used, able to download the image with the following code. It's working good.

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

                                       }
                                   }];

Kindly let me know if did any mistake, or any suggestions.

Update 1: Tried to download the image using post man. Kindly check the image. The same image URL is working on SDWebImage v3.5.4 after i upgraded to SDWebImage v4.4.5, it is not lodging the image.

Is there any configurations am i missing? Installed pod 'SDWebImage/WebP' also, added SD_WEBP=1 in Build settings -> Preprocessor macros.

Error: Error Domain=SDWebImageErrorDomain Code=0 "Downloaded image has 0 pixels" UserInfo={NSLocalizedDescription=Downloaded image has 0 pixels}

enter image description here

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

Authorization: Email: kkk1@ler.com , Token: A-BE3D-WER3-847F-ER6YG5678G

Babul
  • 1,268
  • 2
  • 15
  • 42

4 Answers4

4

Basically, SDWebImage has no issue for downloading them from any URL if the URL contains an image.

But in your case, you have tried to get an image from JSON. Your server API returns a JSON object that contains the image as base64String. When you get the JSON response then you need to get the base64String from json and then create an image from the base64String.

You can use this method for decoding string to image using Objective C.

- (UIImage *)decodeBase64ToImage:(NSString *)strEncodeData {
  NSData *data = [[NSData alloc]initWithBase64EncodedString:strEncodeData options:NSDataBase64DecodingIgnoreUnknownCharacters];
  return [UIImage imageWithData:data];
}
Faysal Ahmed
  • 7,501
  • 5
  • 28
  • 50
  • I agree with you, SDWebImage has no issue. I able to download the image if we use NSURLSession, then we are able to parse the JSON for the image. But, without this process, we are able to show the image using SDWebImage only. But, after upgrade, it's not downloading the image. Getting error. – Babul Feb 28 '19 at 10:20
  • If the server is in your control then get the image URL as a response instead of returning base64String. Hope this will help to load the image by using SDWebImage easily. – Faysal Ahmed Feb 28 '19 at 11:03
  • We cannot get the image url directly, as we are saving the image in bytes format in DB. – Babul Feb 28 '19 at 11:19
  • As you said you have to save the data bytes in DB then you can use API call for getting the response and then show the image from data string. – Faysal Ahmed Feb 28 '19 at 11:51
  • yes, we can do. The same url is working in SDWebImage v3.5.4 but not in v4.4.5. I am looking into this, instead of going with alternatives. What might be issue of loading the image using the same image URL. – Babul Feb 28 '19 at 12:53
  • This will be the proper way. Maybe `SDWebImage` update the functionality or somehow remove the feature. – Faysal Ahmed Feb 28 '19 at 12:56
  • yeah. We are not sure. – Babul Feb 28 '19 at 12:57
  • Let us [continue this discussion in chat](https://chat.stackoverflow.com/rooms/189247/discussion-between-faysal-ahmed-and-babul). – Faysal Ahmed Mar 01 '19 at 09:46
  • it's working, Added to convert the response image in SDWebImageDownloaderOperation. Once i got the response, converted to image and assigned to the same. – Babul Mar 06 '19 at 14:24
  • 1
    Added the following code in "SDWebImageDownloaderOperation.m" Method name: ......."- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error"............. Code is: ...... NSDictionary *responseObject = [NSJSONSerialization JSONObjectWithData:self.imageData options:0 error:nil]; if (![[responseObject objectForKey:@"Value"] isEqual:[NSNull null]] && [responseObject objectForKey:@"Value"]) { self.imageData = [[NSData alloc] initWithBase64EncodedString:[responseObject objectForKey:@"Value"] options:0]; } – Babul Mar 07 '19 at 10:18
1

First, update pod and try SDWebImage pod version 3.8.2.

And the second thing is to check your image URL. because I personally test image download with this pod version and downloading functionality is working.

Nilesh R Patel
  • 697
  • 7
  • 17
  • I updated the pods. I have to use the latest SDWebImage instead of 3.8.2. I tried to download the image url "http://i0.wp.com/nmm-izhevsk.ru/wp-content/uploads/2015/06/Olga.jpg?resize=200%2C300" It's working fine with the actual image urls. But, when i tried to download the image from our server url , it's not loading the image. The same is working on older versions. – Babul Feb 28 '19 at 08:46
  • There is no issue with the SDWebImage library, the issue with the server. When working with your image URL, getting 503 error code. Which means "503 Service Unavailable. The server is currently unable to handle the request due to a temporary overloading or maintenance of the server" – Nilesh R Patel Feb 28 '19 at 09:16
  • This is the solution of your server issue https://stackoverflow.com/questions/28184194/kafka-consumer-error-xxxx-nodename-nor-servname-provided-or-not-known – Nilesh R Patel Feb 28 '19 at 09:20
1

I faced the same issue and I was trying webP images. I realised later that I need to add webP coder to SDImageCodersManager. Something like

SDImageCodersManager.shared.addCoder(SDImageWebPCoder.shared)

I did this in AppDelegate.

chakkala
  • 63
  • 10
0

If you are suffering such type issue from SDWebImage library you can go with other one as well which are supporting base64 string object

One of best library I found is "Kingfisher"

Hope you like this and it will solve your issue.

Er.Shreyansh Shah
  • 1,482
  • 1
  • 9
  • 29