Xcode - 将照片上传到服务器问题
问题描述:
我正在构建一个允许用户上传照片并发送到我的服务器的应用程序。但后来我注意到,当我尝试上传多张照片时,比如说5张照片,有时候只上传2-4张图片,有时上传5张图片。上传过程似乎不太一致,我认为这与网络有很大关系。 下面是上传代码:Xcode - 将照片上传到服务器问题
-(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张照片,但图像可能重复: 案例1:Image1,Image2,Image2,Image4,Image4 案例2:Image1 ,Image2,Image3,Image4,Image4
重复可以是5个图像中的任何一个。
任何人都可以帮忙吗?谢谢
答
非常感谢你的建议。 是的,我看了一下NSURLSession,并修改了代码。 基本上我觉得以前的问题现在都解决了,现在我可以成功上传5张照片没有问题了。
答
请尝试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];
试试这个:https://stackoverflow.com/a/28737846/3901620 – KKRocks
我假设(一)你'同时运行这些请求;和(b)你有相同的实例充当所有这些并发请求的代表;和(c)你引用了各种并发请求可能会彼此重叠的ivars。最重要的是,你使用的是不推荐使用的'NSURLConnection'。如果在完成块中使用'NSURLSession',很多这些问题都会解决。 – Rob
非常感谢 – Kevin