2013-11-25 4 views
7

ポストリクエスタにクッキーを添付しなければならない場合はどうすればよいですか?私はこれをどのようにするべきですか?パラメータを使用して画像をアップロードする際に、AFNetworking 2.0でクッキーを設定するにはどうすればよいですか?

NSURL *URL = [NSURL URLWithString:addAddressUrl]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; 

// Set cookie too 
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:@"<URL>"]]; 
NSDictionary *cookiesDictionary = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies]; 

if(cookiesDictionary) { 
    [request setAllHTTPHeaderFields:cookiesDictionary]; 
} 

AFNetworkingコールでこのリクエストを添付するにはどうすればよいですか? 私はAFNetworkingの文書を読んできましたが、マネージャオブジェクトでリクエストにクッキーを設定する方法は説明していません。

iFいくつかの方法でこのクッキーをafnetworkingファイルに内部的に添付していますが、画像をアップロードできません。

最初の方法:私は以下のようにafnetworking方法でクッキーをatttachedいる

-(void)uploadPrescriptionImage :(UIImage *)imagePresc 
{ 
    // upload image here on the prescription 
    /* 
    Uploading a prescription 
    URL: <URL> 
    Params: <PARAMS> 
    Method: POST 
    */ 


    NSData *imageData = UIImageJPEGRepresentation(imagePresc, 1.0); 

    NSString *orderID = [[NSUserDefaults standardUserDefaults] valueForKey:@"orderId"]; // orderId 

    NSDictionary *parameters = @{@"docName":prescriptionCell.doctorNameTextField.text,@"patientName":prescriptionCell.patientNameTextField.text,@"orderId" : orderID}; 

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    [manager POST:@"<URL>" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) 
    { 
     [formData appendPartWithFileData:imageData name:@"prescription" fileName:@"prescription" mimeType:@"image/jpeg"]; 
    } 
      success:^(AFHTTPRequestOperation *operation, id responseObject) 
    { 
     NSLog(@"response is : %@",responseObject); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    { 
     NSLog(@"Error: %@ *****", [error description]); 
    }]; 
} 

- (AFHTTPRequestOperation *)POST:(NSString *)URLString 
         parameters:(NSDictionary *)parameters 
     constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block 
         success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success 
         failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure 
{ 
    NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters constructingBodyWithBlock:block]; 
    NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:@"<URL>"]]; 
    NSDictionary *cookiesDictionary = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies]; 
    if (cookiesDictionary) { 
     [request setAllHTTPHeaderFields:cookiesDictionary]; 
    } 
    AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; 
    [self.operationQueue addOperation:operation]; 

    return operation; 
} 

第二の方法:私はそれの2つの方法を試してみました

NSDictionary *parameters = @{@"docName":@"rr",@"patientName":@"tt",@"orderId" : @"1"}; 


    NSString *URLString = @"<URL>"; 
// 
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; 
// 
    NSURL *URL = [NSURL URLWithString:URLString]; 
    NSMutableURLRequest *request = [NSURLRequest requestWithURL:URL]; 

    // Set cookie too 
    NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:[NSURL URLWithString:@"<URL>"]]; 
    NSDictionary *cookiesDictionary = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies]; 
    if (cookiesDictionary) { 
     [request setAllHTTPHeaderFields:cookiesDictionary]; 
    } 
// 
// NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; 
    NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:[NSURL URLWithString:filePathOfImage] progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) 
    { 
     if (error) { 
      NSLog(@"Error: %@", error); 
     } else { 
      NSLog(@"Success: %@ %@", response, responseObject); 
     } 
    }]; 
    [uploadTask resume]; 
} 

しかし、私はこのリクエストでどのようにパラメータを追加するのか知りません。一般的なマット・トンプソン..助けてくださいこれはマキですngが

答えて

1

がit..Iは...であることは、両方の方法で使用することができるかもしれない唯一の最初の方法でそれを使用している解決することができました..私は第二の方法を好むしたい...誰もがfrushtrated:

ここで私は2.0をafnetworkingで画像をアップロードすることができたかの私のコードは次のとおりです。

NSString *fileName = [NSString stringWithFormat:@"Prescription%d.jpg", counter]; 

    NSData *imageData = UIImageJPEGRepresentation(imagePresc, 1.0); 

    NSString *orderID = [[NSUserDefaults standardUserDefaults] valueForKey:@"orderId"]; // orderId 

    NSDictionary *parameters = @{@"docName":prescriptionCell.doctorNameTextField.text,@"patientName":prescriptionCell.patientNameTextField.text,@"orderId" : orderID}; 

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    [manager POST:@"http://staging.healthkartplus.com/webservices/prescription/upload" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData){ 
     [formData appendPartWithFileData:imageData name:@"file" fileName:fileName mimeType:@"image/jpeg"]; 

    }success:^(AFHTTPRequestOperation *operation, id responseObject) 
    { 
     NSLog(@"response is : %@",responseObject); 
    }failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    { 
     NSLog(@"Error: %@ *****", [error description]); 
    }]; 

このコードの重要な部分がある:

[formData appendPartWithFileData:imageData name:@"file" fileName:fileName mimeType:@"image/jpeg"]; 

必要にここで上記のコード行でパラメータの名前とパラメータの型(image)を正確に指定します。ここでは、 "file"パラメータを渡す必要があります(私のサーバーサイドの人から得たAPIに従って)。タイプは "image/jpeg"(またはimage/pdfまたはimage/pngと考える)でなければなりません。

:私がやっていただけのミスは私が同じようにそれを送っているはずsummeriseし、画像の正しいパラメータを指定していなかったです NSString *fileName = [NSString stringWithFormat:@"Prescription%d.jpg", counter];

:あなたは、ここで私は、ファイル名を渡しています、ファイル名を任意の名前を渡すことができます

  • パラメータキー: "ファイル"
  • データ: "ファイルや画像データ"
  • ファイル名: ".JPG" //注: イメージ名の拡張子が
  • がなければならないMIMEタイプ: ""
関連する問題