在项目开发的时候使用AfNetWorking 上传图片 服务器那边说识别不出来我这边的图片格式 但是我记得以前我也用过这个方法 是可以成功上传图片 的 下面的代码是block封装的上传图片代码
#pragma mark -- 上传图片 --
+ (void)uploadWithURLString:(NSString *)URLString
parameters:(id)parameters
uploadData:(NSData *)uploadData
uploadName:(NSString *)uploadName
success:(void (^)())success
failure:(void (^)(NSError *))failure {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html",nil];
[manager POST:URLString parameters:parameters constructingBodyWithBlock:^(id< AFMultipartFormData > _Nonnull formData) {
[formData appendPartWithFileData:uploadData name:uploadName fileName:[NSString stringWithFormat:@"%@.png",uploadName] mimeType:@"image/png"];
} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (success) {
success(responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
使用代码
[HttpUtil uploadWithURLString:[SaunaRoomBaseUrl stringByAppendingString:UploadImgFile] parameters:parmasDict uploadData:imgData uploadName:@"file" success:^( id _Nullable responseObject) {
NSLog(@"responseObject %@",responseObject);
NSError* err = nil;
UploadImgBean* bean = [[UploadImgBean alloc] initWithDictionary:responseObject error:&err];
} failure:^( NSError * _Nonnull error) {
NSLog(@"error %@",[error description]);
}];
后面和服务端花了点时间对了下 发现这里需要注意两个问题
如下
[formData appendPartWithFileData:uploadData name:uploadName fileName:[NSString stringWithFormat:@"%@.png",uploadName] mimeType:@"image/png"];
1. fileName 这个参数填写的必须是.png 或者jpeg 结尾的字符串
name 这个参数 这个要和你服务器的请求参数 名称一致 否则他那边识别不出来 比如 他的图片保存方法 是
public void SaveImg(MultipartFile file...)
那么你的name这个参数后面就填写file 即可 后面我和服务端把这个file改成 hello 重启服务器 然后我这边也改成 hello 发现 hello可以请求成功 填写其他不成功 亲测有效