2013-11-25 9 views
7

Co się stanie, jeśli będę musiał dołączyć plik cookie z żądaniem wysłania wiadomości? Jak mam to zrobić?Jak mogę ustawić pliki cookie za pomocą AFNetworking 2.0 podczas przesyłania obrazu z parametrami?

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]; 
} 

Jak dołączyć tę prośbę za pomocą wywołania AFNetworking? Przeszedłem przez dokumenty AFNetworking, ale nie wyjaśniono, jak ustawić plik cookie w żądaniu za pomocą jego obiektu menedżera.

I w jaki sposób załączam ten plik cookie do wewnętrznych plików sieciowych, Nadal nie mogę przesłać obrazu. Próbowałem dwa możliwe sposoby go:

Pierwszy sposób:

-(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]); 
    }]; 
} 

Mam atttached cookies w metodzie afnetworking jak poniżej:

- (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; 
} 

Drugi sposób:

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]; 
} 

Ale nie wiem jak dodać parametry z tą prośbą .. wspólny Matt Thompson .. Proszę, pomóż mi, to jest maki ng frushtrated wszystkim .. Chciałbym preferują drugą drogę ..

Odpowiedz

1

Był w stanie rozwiązać it..I zostały wykorzystane tylko pierwszy sposób .. może być tak, że mogą być stosowane w obu sposobów:

Oto mój kod, jak udało mi się przesłać obraz z afnetworking 2,0:

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]); 
    }]; 

ważną częścią tego kodu jest:

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

tutaj w powyższej linii kodu trzeba dokładnie podać nazwę parametru i typ parametru (obraz). Tutaj parametr "file" musi zostać przekazany do niego (zgodnie z API, który dostałem od moich facetów po stronie serwera), a typem powinno być "image/jpeg" (lub image/pdf lub myślę, że image/png). i można przekazać dowolną nazwę pliku, jestem tutaj przekazując nazwę pliku jako: NSString *fileName = [NSString stringWithFormat:@"Prescription%d.jpg", counter];

Jedynym błędem robiłem to ja nie podając poprawny parametr dla obrazu, aby summerise powinienem Wysłano go lubię:

  • kluczowym parametrem: "plik"
  • danych: "plik lub obraz danych"
  • nazwa pliku: ".jpg" // UWAGA: przedłużenie nazwy obrazu musi być tam
  • typ
  • mim: ""
Powiązane problemy