簡體   English   中英

如何在Multipart Form數據請求iOS中添加標題?

[英]How to add header in Multipart Form data request iOS?

以下是我的代碼段。 運行此代碼時出現錯誤。 我已將標頭添加為請求的一部分。 那是正確的方法嗎?

         __block int i=1;
         AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:url]];
         NSDictionary *parameters = @{@"wave_Id": [inputDictionary objectForKey:@"wave_Id"]};
         AFHTTPRequestOperation *op = [manager POST:url parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

             for(NSData *imageData in [inputDictionary objectForKey:@"images"])
             {
                 [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"file%d",i] fileName:[NSString stringWithFormat:@"abc%d.png",i] mimeType:@"image/png"];
                 i++;
             }
             NSError *error;
             NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:&error];
             NSAssert(jsonData, @"Failure building JSON: %@", error);
             NSLog(@"Json Data Image Upload %@",jsonData);
             NSAssert(jsonData, @"Failure building JSON: %@", error);
             NSString *token = [SSKeychain passwordForService:RegistrationTokenKey account:LoggedInUserKey];

             NSDictionary *jsonHeaders = @{@"Content-Disposition" : @"form-data; name=\"parameters\"",
                                           @"Content-Type"        : @"application/json",
                                           @"Accept"              : @"application/json",
                                           @"Authorization"       : token};
             [formData appendPartWithHeaders:jsonHeaders body:jsonData];

         } success:^(AFHTTPRequestOperation *operation, id responseObject) {
             NSLog(@"Success: %@ ***** %@", operation.responseString, responseObject);
         } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
             NSLog(@"Error: %@ ***** %@", operation.responseString, error);
         }];
         [op start];

我需要您完整的方法來100%確定,但是請嘗試以這種方式編寫並查看是否有幫助:

__block int i = 1;
NSMutableArray *mutableOperations = [NSMutableArray array];
NSDictionary *parameters = @{@"wave_Id": [inputDictionary objectForKey:@"wave_Id"]};

for (NSData *imageData in [inputDictionary objectForKey:@"images"]) {

    NSURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST"
                                                                                       URLString:url
                                                                                      parameters:parameters
                                                                       constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileData:imageData
                                   name:[NSString stringWithFormat:@"file%d",i]
                               fileName:[NSString stringWithFormat:@"abc%d.png",i]
                               mimeType:@"image/png"];
        i++;
    }
                                                                                           error:nil];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [mutableOperations addObject:operation];
}


NSArray *operations = [AFURLConnectionOperation batchOfRequestOperations:mutableOperations progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) {
    NSLog(@"%lu of %lu images uploaded!", numberOfFinishedOperations, totalNumberOfOperations);
} completionBlock:^(NSArray *operations) {
    NSLog(@"All images have been uploade!");
}];

[[NSOperationQueue mainQueue] addOperations:operations waitUntilFinished:NO];

實際上,我修改了相同的代碼,現在可以正常工作了。 將“內容類型”更改為“多部分/表單數據”。 還將API請求中我的imagesArray的鍵(參數名稱)添加到以下方法“ formData appendPartWithFileData:imageData name:@“ yourKey” ...“

如果(_isUploadImage){

         __block int i=1;
         AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:url]];
         [manager.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];
         [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
         if (_shouldBeInHeader) {
             NSString *token = [SSKeychain passwordForService:RegistrationTokenKey account:LoggedInUserKey];
             [manager.requestSerializer setValue:[NSString stringWithFormat:@"Token %@",token] forHTTPHeaderField:@"Authorization"];
         }
         NSDictionary *parameters = @{@"wave_id": [inputDictionary objectForKey:@"wave_id"]};
         AFHTTPRequestOperation *op = [manager POST:url parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

              for (NSData *imageData in [inputDictionary objectForKey:@"images"])
             {
                [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"images"] fileName:[NSString stringWithFormat:@"abc%d.png",i] mimeType:@"image/png"];
                 i++;
             }

            } success:^(AFHTTPRequestOperation *operation, id responseObject) {
             NSLog(@"Success");
         } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"Failed");
         }];

         [op start];
         }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM