发送请求上传数据中带有图片时,使用这个方法- (NSURLSessionDataTask *)POST:(NSString *)URLString
,示例代码如下:
parameters:(id)parameters
constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
progress:(nullable void (^)(NSProgress * _Nonnull))uploadProgress
success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
NSDictionary *params = @{
@"cardnum":certificate.cardNumber,
@"name":certificate.partyName,
};
NSData *data = UIImagePNGRepresentation(certificate.avatarImage);
dispatch_async(dispatch_get_global_queue(0, 0), ^{
AFHTTPSessionManager *manager = [[AFHTTPSessionManager manager] initWithBaseURL:[NSURL URLWithString:kUrl(@"addCardinfo")]];
//证书
// 设置证书模式
NSString * cerPath = [[NSBundle mainBundle] pathForResource:@"scadahzsoc" ofType:@"cer"];
NSData * cerData = [NSData dataWithContentsOfFile:cerPath];
manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:[[NSSet alloc] initWithObjects:cerData, nil]];
// 客户端是否信任非法证书
manager.securityPolicy.allowInvalidCertificates = YES;
// 是否在证书域字段中验证域名
[manager.securityPolicy setValidatesDomainName:NO];
[manager POST:kUrl(@"addCardinfo") parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:data
name:@"img"
fileName:@"pic.jpeg"
mimeType:@"image/jpeg"];
} progress:nil success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"Response: %@", responseObject);
dispatch_async(dispatch_get_main_queue(), ^{
});//主线程
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"Error: %@", error);
}];
});
注意:
以上代码中的证书相关的设置试用于配置https 的请求,在配置证书的情况下manager在初始化的情况下必须给它一个baseUrl,否则会崩溃,相关内容可以浏览
iOS 配置https后程序崩溃