【问题标题】:Xcode - Upload photos to server issuesXcode - 将照片上传到服务器问题
【发布时间】:2017-12-19 03:02:19
【问题描述】:

我正在构建一个允许用户上传照片并发送到我的服务器的应用程序。但后来我注意到,当我尝试上传多张照片时,比如说 5 张照片,有时只上传 2-4 张图片,有时上传 5 张图片。上传过程似乎不太一致,我认为这与网络有很大关系。 以下是上传代码:

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{

NSString *returnString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSMutableDictionary * dict = [[NSMutableDictionary alloc]init];
dict = [returnString JSONValue];
[responseStr addObject:[[dict objectForKey:@"Image"]objectForKey:@"Name"]];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
ImageIndex = ImageIndex+1;
[self imageUplaodAndProductUploadFunction:ImageIndex];
}

然后我想出了一个解决方法:

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{

NSString *returnString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSMutableDictionary * dict = [[NSMutableDictionary alloc]init];
dict = [returnString JSONValue];
if([responseStr containsObject:[[dict objectForKey:@"Image"]objectForKey:@"Name"]])
{
    NSLog(@"It present");
    itcontains =YES;
}
else
{
    itcontains = NO;
    NSLog(@"Not contain");
    [responseStr addObject:[[dict objectForKey:@"Image"]objectForKey:@"Name"]];
}

}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
if(itcontains == NO)
{
   ImageIndex = ImageIndex+1;
}
[self imageUplaodAndProductUploadFunction:ImageIndex];
}

现在,它会正确上传 5 张照片,但随后发生了奇怪的情况: 假设我有 5 张图像,Image1、Image2、Image3、Image4 和 Image 5。 5张照片上传成功,但图片可能重复: 案例一:Image1、Image2、Image2、Image4、Image4 案例2:Image1、Image2、Image3、Image4、Image4

副本可以是 5 张图片中的任何一张。

有人可以帮忙吗?谢谢

【问题讨论】:

  • 我假设 (a) 您正在同时运行这些请求; (b) 您有相同的实例作为所有这些并发请求的委托人; (c) 您正在引用 ivars,其中各种并发请求可能会相互叠加。最重要的是,您正在使用已弃用的NSURLConnection。如果您将NSURLSession 与完成块一起使用,很多这些问题都会自行解决。

标签: ios xcode image file-upload photo


【解决方案1】:

非常感谢您的建议。 是的,我查看了 NSURLSession,并修改了代码。 基本上,我认为以前的问题现在都解决了,我现在可以成功上传5张照片没有问题。

【讨论】:

    【解决方案2】:

    请尝试 NSURLSessionUploadTask

    // 后台上传仅适用于文件

    NSString *fileName = [NSString stringWithFormat:@"%@%@", IMAGE_NAME_TO_BE_SAVED, @".png"];
    NSString *signatureFile = [NSString stringWithFormat:@"%@/%@",  NSTemporaryDirectory(), fileName];
    
    NSData *imageData = UIImagePNGRepresentation(image);
    [imageData writeToFile:signatureFile atomically:YES];
    
    while (![[NSFileManager defaultManager] fileExistsAtPath:signatureFile]) {
        [NSThread sleepForTimeInterval:.5];
    }
    
    NSURLSession *session = [self backgroundSession];
    
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:uploadUrl]];
    [request setHTTPMethod:@"POST"];
    [request addValue:@"image/png" forHTTPHeaderField:@"Content-Type"];
    
    NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromFile:[NSURL fileURLWithPath:signatureFile]];
    
    [uploadTask resume];
    

    【讨论】:

      猜你喜欢
      • 2019-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      • 2011-04-11
      相关资源
      最近更新 更多