【发布时间】:2016-11-28 17:46:50
【问题描述】:
我正在开发一个需要将文件上传到某个服务器的应用程序,并且我正在使用AFNetworking 上传文件。
一切正常,除非文件大小像 2mb 这样短,如果超过这个,服务器以状态码 500 响应我错误并且不上传文件。
下面是我上传的代码。
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:lang forHTTPHeaderField:@"Accept-Language"];
[request setValue:authVal forHTTPHeaderField:@"authorization"];
[request setValue:[headerParams objectForKey:@"x-file-name"] forHTTPHeaderField:@"x-file-name"];
[request setValue:[headerParams objectForKey:@"x-convert-document"] forHTTPHeaderField:@"x-convert-document"];
[request setValue:[headerParams objectForKey:@"x-source"] forHTTPHeaderField:@"x-source"];
//convert parameters in to json data
if ([params isKindOfClass:[NSDictionary class]]) {
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params
options:NSJSONWritingPrettyPrinted
error:&error];
jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
[request setURL:[NSURL URLWithString:action]];
[request setTimeoutInterval:200.0];
[request setHTTPMethod:@"POST"];
NSMutableData *postBody = [NSMutableData data];
[postBody appendData:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:imageData];
NSLog(@"File size is : %.2f MB",(float)imageData.length/1024.0f/1024.0f);
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:request];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSInteger statusCode = [operation.response statusCode];
NSNumber *statusObject = [NSNumber numberWithInteger:statusCode];
successBlock(responseObject, statusObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}
[request setHTTPBody:imageData]; 的代码行正在设置图像的NSData。
同样的事情在 Android 上也能正常工作,但他们使用流,首先将文件写入物理路径,然后使用流上传。这可以通过使用AFNetworking 来实现吗?还是我也可以使用其他方法来实现这一点?
寻找建议。
谢谢
【问题讨论】:
-
为您的概念使用多格式数据
-
还要检查服务器是否有限制。如果服务器上设置了最大上传大小。
-
@AshishP。不,没有限制,正如我提到的那样,Android 人使用流来处理相同的大文件
-
正如 API 文档中提到的那样,流的“Content-Type application/octet-stream”
-
你的服务器有问题,别管那些可怜的 Android 家伙。你说有500? 服务器内部错误?
标签: ios objective-c xcode api afnetworking