【问题标题】:how can i get multiple images from server using url in iOS如何在 iOS 中使用 url 从服务器获取多个图像
【发布时间】:2015-01-20 05:43:16
【问题描述】:

您好,我正在使用 iOS 中的 url 从服务器获取单个图像。

我的代码是这样的

- (IBAction)overlaysClicked:(id)sender
{
    NSLog(@"overlays Clicked");
    request = [NSURLRequest requestWithURL:[NSURL         URLWithString:@"http://sukhada.co.in/img/overlays/neon/ov1.png"]];
    [NSURLConnection connectionWithRequest:request delegate:self];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,   NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *localFilePath = [documentsDirectory    stringByAppendingPathComponent:@"image.jpg"];

    NSData *thedata = [NSData dataWithContentsOfURL:[NSURL    URLWithString:@"http://sukhada.co.in/img/overlays/neon/ov1.png"]];
    [thedata writeToFile:localFilePath atomically:YES];

    UIImage *img = [[UIImage alloc] initWithData:thedata];

    self.overlayImgView.image=img;
}

要从服务器获取多个图像,我的代码是这样的

NSURL *myUrl = [NSURL URLWithString:@"http://sukhada.co.in/img/overlays/neon.zip"];
NSURLRequest *myRequest = [NSURLRequest requestWithURL:myUrl cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60];
myData = [[NSMutableData alloc] initWithLength:0];
NSURLConnection *myConnection = [[NSURLConnection alloc] initWithRequest:myRequest delegate:self startImmediately:YES];

//我的Array在viewDidload中是这样的

self.overlaysImgsArray = [[NSMutableArray alloc]initWithContentsOfURL:[NSURL    URLWithString:@"http://sukhada.co.in/img/overlays/neon.zip"]];
NSLog(@"urls is %@",overlaysImgsArray);
for (int i=0; i<[overlaysImgsArray count]; i++)  
//download array have url links
{
    NSURL *URL = [NSURL URLWithString:[overlaysImgsArray objectAtIndex:i]];
    NSMutableURLRequest *urlRequest = [[NSMutableURLRequest alloc]initWithURL:URL];
    NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
    {
        if([data length] > 0 && [[NSString stringWithFormat:@"%@",error] isEqualToString:@"(null)"])
        {
            //make your image here from data.
            UIImage *imag = [[UIImage alloc] initWithData:[NSData dataWithData:data]];
            NSArray *array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *docDir = [array objectAtIndex:0];
            NSString *imgstr=[NSString stringWithFormat:@"%d",i];
            NSString *pngfilepath = [NSString stringWithFormat:@"%@sample%@.png",docDir,imgstr];
            NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(imag)];
            [data1 writeToFile:pngfilepath atomically:YES];
        }
        else if ([data length] == 0 && [[NSString stringWithFormat:@"%@",error] isEqualToString:@"(null)"])
        {
            NSLog(@"No Data!");
        }
        else if (![[NSString stringWithFormat:@"%@",error] isEqualToString:@"(null)"]){
            NSLog(@"Error = %@", error);
        }
    }];
    }
}

但这对我不起作用,请任何人建议我如何使用包含所有图像的一个 url 从服务器获取多张图像。请任何人 提前谢谢你

【问题讨论】:

  • 没有给你问题
  • 非常感谢您回复我..如何使用 url 从服务器下载多个图像..我从包含一个图像的 url 获取单个图像..但没有从包含多个图像的 url 获取多个图像图片
  • 你可以把png名字存成0v1.png.ov2.png....然后把所有的url字符串都拉出来
  • 你的意思是所有的 png 图像都保存到一个 url 中?还是所有 png 图片 url 都保存到一个通用 url 中?
  • 实际上我的问题是从 url 下载图像,即显示

标签: ios nsurlconnection nsurlrequest nsmutableurlrequest


【解决方案1】:

在您的情况下,您可以尝试这样 首先,您需要将所有 10 个图像保存在目录中,并根据您的要求逐个获取。此代码从您的 url 保存所有图像

试试这个

- (IBAction)overlaysClicked:(id)sender {


//Note all your image saved with ov1.png,ov2.png......& so . 

       for (int i=1; i<=10; i++) {

    NSString *st2=@"ov";
    NSString *st1=@"http://sukhada.co.in/img/overlays/neon/ov";
    NSString *imageN=[st2 stringByAppendingString:[NSString stringWithFormat:@"%d",i]];
    NSString *imgNameforkey=[imageN stringByAppendingString:@".png"];
    NSString *url=[st1 stringByAppendingString:[NSString stringWithFormat:@"%d",i]];

    NSString *imgname=[url stringByAppendingString:@".png"];
    NSLog(@" all=%@",imgname);


    NSLog(@"overlays Clicked");
    request = [NSURLRequest requestWithURL:[NSURL         URLWithString:imgname]];
    [NSURLConnection connectionWithRequest:request delegate:self];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,   NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *localFilePath = [documentsDirectory    stringByAppendingPathComponent:imgname];

    NSData *thedata = [NSData dataWithContentsOfURL:[NSURL    URLWithString:imgname]];
    [thedata writeToFile:localFilePath atomically:YES];


    UIImage *img = [[UIImage alloc] initWithData:thedata];

    NSLog(@"imgs %@",img);
   // self.overlayImgView.image=img;
       }
}

在这里你可以看到所有保存的图片

获取图片

使用循环或名称

NSArray *directoryPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *imagePath =  [directoryPath objectAtIndex:0];
imagePath= [imagePath stringByAppendingPathComponent:@"ov1.png"];

 NSData *data = [NSData dataWithContentsOfFile:imagePath];
    UIImage *img = = [UIImage imageWithData:data];

从 url 下载一个 zip 文件并保存它。在按钮操作中使用此代码。现在不需要循环。试试这个

- (IBAction)overlaysClicked:(id)sender {
    dispatch_queue_t queue = dispatch_get_global_queue(0,0);
    dispatch_async(queue, ^{

        NSLog(@"Beginning download");
        NSString *stringURL = @"http://sukhada.co.in/img/overlays/neonra.zip";
        NSURL  *url = [NSURL URLWithString:stringURL];
        NSData *urlData = [NSData dataWithContentsOfURL:url];

        //Find a cache directory. You could consider using documenets dir instead (depends on the data you are fetching)
        NSLog(@"Got the data!");
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
        NSString *path = [paths  objectAtIndex:0];

        //Save the data
        NSLog(@"Saving");
        NSString *dataPath = [path stringByAppendingPathComponent:@"img.zip"];
        dataPath = [dataPath stringByStandardizingPath];
        [urlData writeToFile:dataPath atomically:YES];

    });
}

并检查您将获得 img.zip 文件

【讨论】:

  • 请告诉我我哪里做错了。?它显示 imgs (nul)
  • 非常感谢您给我的建议..我也有这个疑问,但是当我们点击该网址时,它会下载并在下载文件夹中显示 10 张图片..这个过程是否正确?跨度>
  • 否则,当我们点击该网址时,我们想打开新标签并显示所有 10 张图片..对吗?
  • 我面临另一个问题..我已经在 NSLog 中编写了 documentDirectory 路径..每次在循环中它显示相同的路径..当我们检查该路径时它只显示 ov1.png 图像但 url不一样
猜你喜欢
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-28
  • 2016-07-28
相关资源
最近更新 更多