相信很多项目里都涉及到用户头像替换这个问题,公司后台直接在提交头像的接口里就返回了头像地址,并且是不变的,就是说头像地址一直是不变的(项目使用了SDWebImage库),提交了头像后不能替换过来,估计原因是SD库里有缓存,而且这个缓存可能跟头像路径有关系,所以尝试改变头像路径。后台是肯定可以做到的,客户端怎样改变路径,而且要每次都不同,想到了时间戳,直接上代码吧
[loadImage sendPictures: ^(UIImage *image)
{NSData * imageData = UIImageJPEGRepresentation(image, 1);
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:imageData forKey:@"headPhoto"];
NSString *uid = [WSUserDefaultUtils getValueforKey:@"userID"];
//向服务器提交选好的照片
NSDictionary * dict = @{@"userId":uid};
NSMutableDictionary * loadDict = [[NSMutableDictionary alloc]init];
[loadDict setValue:imageData forKey:@"headImage"];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"text/plain",nil];
// 参数
NSString * stringURL = [NSString stringWithFormat:@"%@%@",API,@"AccountService/updateUserHeadImage"];
// 访问路径
[manager POST:stringURL parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
{
// 上传文件
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyyMMddHHmmss";
NSString * str = [formatter stringFromDate:[NSDate date]];
NSString * fileName = [NSString stringWithFormat:@"%@.jpg", str];
[formData appendPartWithFileData:imageData name:@"headImage" fileName:fileName mimeType:@"image/png"];
}
progress:^(NSProgress * _Nonnull uploadProgress)
{
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject)
{
[self.view makeToast:@"替换头像成功" duration:1.5 position:CSToastPositionCenter];
[self.headBtn setBackgroundImage:image forState:UIControlStateNormal];
NSString * stamp = [NSFormatter dateConvertStamp];//当前时间转换为时间戳
NSString * newImage = [NSString stringWithFormat:@"%@?%@",responseObject[@"data"],stamp];//头像路径加时间戳
[[NSUserDefaults standardUserDefaults] setObject:newImage forKey:@"image"];
// [self.headBtn setImage:image forState:UIControlStateNormal];;//成功提交后才改变页面的头像
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
{
[self.view makeToast:@"替换头像失败" duration:1.5 position:CSToastPositionCenter];
NSLog(@"[error description] = %@",[error description]);
}];
}];
其实还有一种笨方法,既然路径已经给了,就可以直接从路径里拿数据,把头像文件的二进制文件下载下来,简单来说就是nsdata转成uiimage就行了