ios - 图像通过多部分 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];
但是,对于较大的图像文件,尽管图像已上传,但我从未从服务器得到响应,因为我可以在管理面板中找到它们。
解决方案
推荐阅读
- c++ - C++ win32 LoadImageW 返回 null
- powershell - Azure Active Directory B2C 角色模板显示名称不一致
- flutter - 触发器可从按钮颤动中滑动
- javascript - 为什么blinkLED说它正在超时
- sql - 带分隔符的动态连接(忽略空值)
- python - 数据集中文本和单列之间的 cosine_sim
- typescript - 无法 lint vue 3 typescript 应用程序,构建工作
- c# - 使用 2 小时后 CPU 运行高
- cmake - 无法链接到子弹物理库 - LNK2019、LNK2001
- javascript - 为什么 Javascript 中没有 HTMLSectionElement 和 HTMLArticleElement?