2014-10-16 45 views
0

我已经在ios7中完成了多个图像上传。但它不适用于ios 8.我在下面显示了我的代码。请告诉我该怎么办?使用Afnetworking的图像上传不能在ios8中工作

NSString *url = [NSString stringWithFormat:@"%@abc.php", SERVERNAME]; [manager POST:url parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
     for (int i = 0; i < filesCount; i++) { 
      NSString *imgName = [NSString stringWithFormat:@"image%d", (int)(i + 1)]; 
      NSData *imgData = [[NSData alloc] initWithContentsOfFile:[dataPath stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@", filelist[i]]]]; 
      [formData appendPartWithFileData:imgData name:imgName fileName:filelist[i] mimeType:@"image/png"]; 
     } 
     } success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog("getting response");  } Failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     //NSLog(@"Error: %@ ***** %@", operation.responseString, error); 

    }]; 

调试点不成功部分。 你能帮我解决这个问题吗?

在此先感谢。

+0

嗨抢,当它出现在失败的部分它显示请求超时错误。我也检查了imgdata。它有价值。它不是零。 – 2014-10-16 16:31:35

+0

非常好。我想我现在要求在iOS 7下使用[Charles](http://charlesproxy.com)运行此请求,并再次在iOS 8下运行此请求,并查看是否可以看到任何区别。 – Rob 2014-10-16 16:56:19

回答

0

您可以用以下代码从POST请求响应您的项目或NSJSONSerialization类

1添加SBJSON类对数据进行编码

NSURL *url = [[NSURL alloc]initWithString:@"You -server -url "]; 

    NSMutableURLRequest *theRequest = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 

    // Server parameter dict 

    NSDictionary *jsonDict = [[NSDictionary alloc] initWithObjectsAndKeys:txtUserName.text,@"Email",txtPassword.text,@"Password",[appDelegate uniqueIDForDevice],@"DeviceToken",@"ios",@"DeviceType", nil]; 

    NSString *jsonRequest = [jsonDict JSONRepresentation]; 
    NSData *requestData = [jsonRequest dataUsingEncoding:NSUTF8StringEncoding]; 

    [theRequest setHTTPMethod:@"POST"]; 
    [theRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    [theRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [theRequest setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"]; 
    [theRequest setHTTPBody: requestData]; 


    [NSURLConnection sendAsynchronousRequest:theRequest queue:[NSOperationQueue currentQueue] 
          completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
    { 
     NSError *err = nil ; 

     NSDictionary *dict= [NSJSONSerialization JSONObjectWithData :data options : 0 error :&err]; 

     NSLog(@"%@",dict); 
    }];   
} 
+0

Hi Karan,谢谢你的回答。但我的问题是我在使用Afnetworking library在服务器上传多张图片时遇到了一个问题。在这里如何传递上传图片的参数。如果您有任何其他解决方案使用Afnetworking库或任何其他Concept上传多个图像。那么请与我分享。 – 2014-10-16 16:41:25

+0

嗨Asha,在NSArray中添加图像的集合,然后将NSArray转换为NSData NSData * requestData = [NSKeyedArchiver archivedDataWithRootObject:<图像数组对象的集合>]; NSString * str = [[NSString alloc] initWithData:requestData encoding:NSUTF8StringEncoding]; – 2014-10-17 05:11:32

+0

@AshaSharma你的问题解决了吗? – 2014-10-17 07:20:49

0

我已经尝试了这个方法

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 

    NSURL *baseUrl = [NSURL URLWithString:url]; 

    NSString *charset = (NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)); 
    [request setURL:baseUrl]; 
    [request setHTTPMethod:@"POST"]; 

    NSString *boundary = @"0xKhTmLbOuNdArY"; 
    NSString *endBoundary = [NSString stringWithFormat:@"\r\n--%@\r\n", boundary]; 

    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; charset=%@; boundary=%@", charset, boundary]; 
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

    NSMutableData *tempPostData = [NSMutableData data]; 
    [tempPostData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 



    for(int i=0;i<keys.count;i++){ 
     NSString *str = values[i]; 
     NSString *key =keys[i]; 
     NSLog(@"Key Value pair: %@-%@",key,str); 
     [tempPostData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [tempPostData appendData:[str dataUsingEncoding:NSUTF8StringEncoding]]; 
     // [tempPostData appendData:[@"\r\n--%@\r\n",boundary dataUsingEncoding:NSUTF8StringEncoding]]; 
     [tempPostData appendData:[endBoundary dataUsingEncoding:NSUTF8StringEncoding]]; 

    } 

    //semd multiple images to server 
    for (int i = 0; i < filesCount; i++) { 

     [tempPostData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

     if (i == 0) 
     { 
      [tempPostData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image1\"; filename=\"%@\"\r\n", filelist[0]] dataUsingEncoding:NSUTF8StringEncoding]]; 
      [tempPostData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
      [tempPostData appendData:imageData1]; 
      [tempPostData appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     } 

     else if (i == 1) 
     { 
      [tempPostData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image2\"; filename=\"%@\"\r\n", filelist[1]] dataUsingEncoding:NSUTF8StringEncoding]]; 
      [tempPostData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
      [tempPostData appendData:imageData2]; 
      [tempPostData appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     } 
     else 
     { 
      [tempPostData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image3\"; filename=\"%@\"\r\n", filelist[2]] dataUsingEncoding:NSUTF8StringEncoding]]; 
      [tempPostData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
      [tempPostData appendData:imageData3]; 
      [tempPostData appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     } 
     //  [tempPostData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
     //  [tempPostData appendData:imgData]; 

    } 




    [tempPostData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [request setHTTPBody:tempPostData]; 
    _receivedData = [NSMutableData dataWithCapacity: 0]; 

    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    if(theConnection) 
    { 

     NSLog(@"request uploading successful"); 


    } 
    else 
    { 
     _receivedData = nil; 
     NSLog(@"theConnection is NULL"); 
    } 

它正在为我工​​作。它正在上传多张图片。并且Afnetworking在ios8中仍然存在问题。

谢谢