Изображение загружается через многочастный сервис POST, но я не получаю ответ от сервера - PullRequest
1 голос
/ 16 октября 2019

Я использую следующий код для загрузки изображений на сервер:

void call_MediaUploadAPI(NSArray *parameters, NSString *url, BOOL isAnUpdate, SuccessBlock successBlock, FailureBlock failureBlock)
{
NSString *boundary = @"----WebKitFormBoundary7MA4YWxkTrZu0gW";
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@", BASEURL, url]]
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:600.0];

[request setHTTPMethod:@"POST"];

NSString *token = [[NSUserDefaults standardUserDefaults]valueForKey:TOKEN];
NSString *authValue = [NSString stringWithFormat: @"JWT %@",token];
[request setValue:authValue forHTTPHeaderField:@"Authorization"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request setValue:contentType forHTTPHeaderField: @"Content-Type"];

NSError *error;
NSMutableData *body = [NSMutableData data];
for (NSDictionary *param in parameters) {
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    if (param[@"fileName"]) {
        NSString *mimetype  = [[NetworkIntractor sharedManager] mimeTypeForPath:param[@"fileName"]];
        NSData *imageData = [NSData dataWithContentsOfFile:param[@"fileName"]];
        [body appendData:[[NSString stringWithFormat:@"Content-Disposition:form-data; name=\"%@\"; filename=\"%@\"\r\n", param[@"name"], param[@"fileName"]]dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", mimetype]dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:imageData];
        if (error) {
            NSLog(@"%@", error);
        }
    } else {
        [body appendData:[[NSString stringWithFormat:@"Content-Disposition:form-data; name=\"%@\"\r\n\r\n", param[@"name"]]dataUsingEncoding:NSUTF8StringEncoding]];
        if ([param[@"name"] isEqualToString:@"data"]) {
            [body appendData:[NSJSONSerialization dataWithJSONObject:param[@"value"] options:0 error:nil] ];

        }else{
            [body appendData:[[NSString stringWithFormat:@"%@", param[@"value"]]dataUsingEncoding:NSUTF8StringEncoding] ];

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

[request setHTTPBody:body];

NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    if (error == nil) {

        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
        if (dict != nil) {
            NSLog(@"multipart api response : %@", dict);
            successBlock(dict,response);

        }else
        {
            NSLog(@"multipart api failure response : %@", error);
            failureBlock(error,response);
        }
    }}];
[task resume];
}

Я попытался указать другую комбинацию интервалов времени ожидания, как это:

    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    config.timeoutIntervalForRequest = 150.0f;
    config.timeoutIntervalForResource = 300.0f;
    self.session = [NSURLSession sessionWithConfiguration:config delegate:nil delegateQueue:nil];

Но для чуть большегофайлы изображений, я никогда не получаю ответ от сервера, хотя изображение загружается, поскольку я могу найти их доступными в панели администратора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...