首页 > 解决方案 > 图像通过多部分 POST 服务上传,但我没有收到来自服务器的响应

问题描述

我使用以下代码将图像上传到服务器:

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

但是,对于较大的图像文件,尽管图像已上传,但我从未从服务器得到响应,因为我可以在管理面板中找到它们。

标签: iosobjective-c

解决方案


推荐阅读