Commit cb6adc91 cgx

完成用户反馈图片上传及提交反馈接口

1 个父辈 7d5be68f
...@@ -14,7 +14,7 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -14,7 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
/// UIImage转base64字符串 /// UIImage转base64字符串
/// @param image image /// @param image image
- (NSString *)imageToBase64Str:(UIImage *)image; + (NSString *)imageToBase64Str:(UIImage *)image;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END
...@@ -51,8 +51,9 @@ ...@@ -51,8 +51,9 @@
return newImage ; return newImage ;
} }
- (NSString *)imageToBase64Str:(UIImage *)image { + (NSString *)imageToBase64Str:(UIImage *)image {
NSData *imageData = [self resetSizeOfImage:image maxSize:150]; NSData *imageData = [self resetSizeOfImage:image maxSize:150];
DSLog(@"压缩后的图片大小:%.2fKb", imageData.length/1024.0);
NSString *base64Str = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; NSString *base64Str = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
NSString *trimStr = [NSString trimString:base64Str]; NSString *trimStr = [NSString trimString:base64Str];
return trimStr; return trimStr;
...@@ -61,7 +62,7 @@ ...@@ -61,7 +62,7 @@
/** /**
图片宽高尺寸限制在200-1024之间,maxSize kb以内 图片宽高尺寸限制在200-1024之间,maxSize kb以内
*/ */
- (NSData *)resetSizeOfImage:(UIImage *)sourceImage maxSize:(NSInteger)maxSize { + (NSData *)resetSizeOfImage:(UIImage *)sourceImage maxSize:(NSInteger)maxSize {
// 最终图片data // 最终图片data
__block NSData *finallImageData = UIImageJPEGRepresentation(sourceImage, 1.0); __block NSData *finallImageData = UIImageJPEGRepresentation(sourceImage, 1.0);
...@@ -94,7 +95,7 @@ ...@@ -94,7 +95,7 @@
finallImageData = UIImageJPEGRepresentation(newImage, 1.0); finallImageData = UIImageJPEGRepresentation(newImage, 1.0);
// 判断当前质量是否满足要求,不满足再进行压缩 // 判断当前质量是否满足要求,不满足再进行压缩
NSUInteger sizeOrigin = finallImageData.length;//data.length即可得到图片的字节大小 NSUInteger sizeOrigin = finallImageData.length; // data.length即可得到图片的字节大小
NSUInteger sizeOriginKB = sizeOrigin / 1000; NSUInteger sizeOriginKB = sizeOrigin / 1000;
...@@ -134,7 +135,7 @@ ...@@ -134,7 +135,7 @@
} }
#pragma mark - 调整图片分辨率/尺寸(等比例缩放) #pragma mark - 调整图片分辨率/尺寸(等比例缩放)
- (UIImage *)newSizeImage:(CGSize)size image:(UIImage *)sourceImage { + (UIImage *)newSizeImage:(CGSize)size image:(UIImage *)sourceImage {
CGSize newSize = CGSizeMake(sourceImage.size.width, sourceImage.size.height); CGSize newSize = CGSizeMake(sourceImage.size.width, sourceImage.size.height);
CGFloat tempHeight = newSize.height / size.height; CGFloat tempHeight = newSize.height / size.height;
...@@ -156,7 +157,7 @@ ...@@ -156,7 +157,7 @@
} }
#pragma mark - 二分法 #pragma mark - 二分法
- (NSData *)halfFuntion:(NSArray *)arr image:(UIImage *)image sourceData:(NSData *)finallImageData maxSize:(NSInteger)maxSize { + (NSData *)halfFuntion:(NSArray *)arr image:(UIImage *)image sourceData:(NSData *)finallImageData maxSize:(NSInteger)maxSize {
NSData *tempData = [NSData data]; NSData *tempData = [NSData data];
NSUInteger start = 0; NSUInteger start = 0;
NSUInteger end = arr.count - 1; NSUInteger end = arr.count - 1;
...@@ -170,8 +171,8 @@ ...@@ -170,8 +171,8 @@
NSUInteger sizeOrigin = finallImageData.length; NSUInteger sizeOrigin = finallImageData.length;
NSUInteger sizeOriginKB = sizeOrigin / 1024; NSUInteger sizeOriginKB = sizeOrigin / 1024;
DSLog(@"当前降到的质量:%ld", (unsigned long)sizeOriginKB); // DSLog(@"当前降到的质量:%ld", (unsigned long)sizeOriginKB);
DSLog(@"\nstart:%zd\nend:%zd\nindex:%zd\n压缩系数:%lf", start, end, (unsigned long)index, [arr[index] floatValue]); // DSLog(@"\nstart:%zd\nend:%zd\nindex:%zd\n压缩系数:%lf", start, end, (unsigned long)index, [arr[index] floatValue]);
if (sizeOriginKB > maxSize) { if (sizeOriginKB > maxSize) {
start = index + 1; start = index + 1;
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string>拍照</string>
<key>CFBundleURLTypes</key> <key>CFBundleURLTypes</key>
<array> <array>
<dict> <dict>
......
...@@ -28,6 +28,7 @@ static int AlbumColumnCount = 4; ...@@ -28,6 +28,7 @@ static int AlbumColumnCount = 4;
NSMutableArray *_selectedPhotos; NSMutableArray *_selectedPhotos;
NSMutableArray *_selectedAssets; NSMutableArray *_selectedAssets;
BOOL _isSelectOriginalPhoto; BOOL _isSelectOriginalPhoto;
NSString *_result_imgurls;
} }
- (void)viewDidLoad { - (void)viewDidLoad {
...@@ -84,7 +85,8 @@ static int AlbumColumnCount = 4; ...@@ -84,7 +85,8 @@ static int AlbumColumnCount = 4;
} }
// 发送提交请求 // 发送提交请求
[DSProgressHUD showProgressHUDWithInfo:@"提交中..."]; [DSProgressHUD showProgressHUDWithInfo:@"提交中..."];
[FeedbackRequestModel adviceFeedbackRequestWithCompletion:^(FeedbackRequestModel * _Nonnull requestModel) { _result_imgurls = _result_imgurls ? _result_imgurls : @"";
[FeedbackRequestModel adviceFeedbackRequestWithContent:self.feedTV.text contentImg:_result_imgurls completion:^(FeedbackRequestModel * _Nonnull requestModel) {
[DSProgressHUD dissmissProgressHUD]; [DSProgressHUD dissmissProgressHUD];
if (requestModel.resCode == DSResCodeSuccess) { if (requestModel.resCode == DSResCodeSuccess) {
[DSProgressHUD showDetailInfo:@"已收到您的宝贵建议,谢谢!"]; [DSProgressHUD showDetailInfo:@"已收到您的宝贵建议,谢谢!"];
...@@ -107,7 +109,7 @@ static int AlbumColumnCount = 4; ...@@ -107,7 +109,7 @@ static int AlbumColumnCount = 4;
}]; }];
} }
- (void)deleteBtnClik:(UIButton *)sender { - (void)deleteBtnClick:(UIButton *)sender {
[_selectedPhotos removeObjectAtIndex:sender.tag]; [_selectedPhotos removeObjectAtIndex:sender.tag];
[_selectedAssets removeObjectAtIndex:sender.tag]; [_selectedAssets removeObjectAtIndex:sender.tag];
...@@ -136,7 +138,7 @@ static int AlbumColumnCount = 4; ...@@ -136,7 +138,7 @@ static int AlbumColumnCount = 4;
cell.addIcon.hidden = YES; cell.addIcon.hidden = YES;
cell.deleteBtn.hidden = NO; cell.deleteBtn.hidden = NO;
cell.deleteBtn.tag = indexPath.row - 1; cell.deleteBtn.tag = indexPath.row - 1;
[cell.deleteBtn addTarget:self action:@selector(deleteBtnClik:) forControlEvents:UIControlEventTouchUpInside]; [cell.deleteBtn addTarget:self action:@selector(deleteBtnClick:) forControlEvents:UIControlEventTouchUpInside];
} }
return cell; return cell;
} }
...@@ -202,9 +204,11 @@ static int AlbumColumnCount = 4; ...@@ -202,9 +204,11 @@ static int AlbumColumnCount = 4;
imagePickerVc.cropRect = CGRectMake(left, top, widthHeight, widthHeight); imagePickerVc.cropRect = CGRectMake(left, top, widthHeight, widthHeight);
// 设置是否显示图片序号 // 设置是否显示图片序号
imagePickerVc.showSelectedIndex = YES; imagePickerVc.showSelectedIndex = YES;
imagePickerVc.autoDismiss = NO;
// 你可以通过block或者代理,来得到用户选择的照片. // 你可以通过block或者代理,来得到用户选择的照片.
__weak TZImagePickerController *weakPicker = imagePickerVc;
[imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) { [imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
if (photos.count) { [self uploadImgsWithPhotos:photos picker:weakPicker]; }
}]; }];
[self presentViewController:imagePickerVc animated:YES completion:nil]; [self presentViewController:imagePickerVc animated:YES completion:nil];
} }
...@@ -253,6 +257,30 @@ static int AlbumColumnCount = 4; ...@@ -253,6 +257,30 @@ static int AlbumColumnCount = 4;
} }
} }
#pragma mark - 图片上传
- (void)uploadImgsWithPhotos:(NSArray<UIImage *> *)photos picker:(TZImagePickerController *)picker {
// 1、处理图片
NSMutableString *mstr = [NSMutableString string];
[mstr appendString:@"["];
for (int index = 0; index < photos.count; index++) {
UIImage *img = photos[index];
NSString *base64Str = [UIImage imageToBase64Str:img];
NSString *sepStr = (index == (photos.count - 1)) ? @"" : @",";
[mstr appendString:[NSString stringWithFormat:@"\"%@\"%@", base64Str, sepStr]];
}
[mstr appendString:@"]"];
// 2、上传图片
[DSProgressHUD showProgressHUDWithInfo:@""];
[FeedbackRequestModel uploadBulkImagesWithImgStr:[mstr copy] completion:^(FeedbackRequestModel * _Nonnull requestModel) {
[DSProgressHUD dissmissProgressHUD];
if (requestModel.resCode == DSResCodeSuccess) {
// 存储图片上传成功后返回的urls
self->_result_imgurls = requestModel.result_imgurls;
[picker dismissViewControllerAnimated:YES completion:nil];
}
}];
}
#pragma mark - lazy #pragma mark - lazy
- (UITextView *)feedTV { - (UITextView *)feedTV {
if (!_feedTV) { if (!_feedTV) {
...@@ -290,7 +318,7 @@ static int AlbumColumnCount = 4; ...@@ -290,7 +318,7 @@ static int AlbumColumnCount = 4;
if (!_commitBtn) { if (!_commitBtn) {
_commitBtn = [UIButton btnWithTitle:@"提交" titleColor:DSWhite font:BoldFont(16) bgColor:BrandColor]; _commitBtn = [UIButton btnWithTitle:@"提交" titleColor:DSWhite font:BoldFont(16) bgColor:BrandColor];
[_commitBtn addTarget:self action:@selector(commitAction) forControlEvents:UIControlEventTouchUpInside]; [_commitBtn addTarget:self action:@selector(commitAction) forControlEvents:UIControlEventTouchUpInside];
[_commitBtn cornerRadius:22]; [_commitBtn cornerRadius:20];
} }
return _commitBtn; return _commitBtn;
} }
......
...@@ -16,10 +16,14 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -16,10 +16,14 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, strong) NSArray *adviceListArr; @property (nonatomic, strong) NSArray *adviceListArr;
/// 未读的回复数 /// 未读的回复数
@property (nonatomic, assign) int unreadCount; @property (nonatomic, assign) int unreadCount;
/// 图片上传返回的图片urls
@property (nonatomic, copy) NSString *result_imgurls;
/// 用户提交反馈接口请求 /// 用户提交反馈接口请求
/// @param content 反馈内容
/// @param contentImg 反馈图片url(客户端上传图片返回的url)
/// @param completion completion /// @param completion completion
+ (NSURLSessionDataTask *)adviceFeedbackRequestWithCompletion:(void (^)(FeedbackRequestModel *requestModel))completion; + (NSURLSessionDataTask *)adviceFeedbackRequestWithContent:(NSString *)content contentImg:(NSString *)contentImg completion:(void (^)(FeedbackRequestModel *requestModel))completion;
/// 用户反馈建议列表请求 /// 用户反馈建议列表请求
/// @param completion completion /// @param completion completion
...@@ -37,6 +41,12 @@ NS_ASSUME_NONNULL_BEGIN ...@@ -37,6 +41,12 @@ NS_ASSUME_NONNULL_BEGIN
// 我的反馈红点提醒接口 // 我的反馈红点提醒接口
+ (NSURLSessionDataTask *)queryUserTotalReplysRequest:(void (^)(FeedbackRequestModel *requestModel))completion; + (NSURLSessionDataTask *)queryUserTotalReplysRequest:(void (^)(FeedbackRequestModel *requestModel))completion;
/// 意见反馈批量上传图片(多张图片)
/// @param imgStr 图片base64字符串数组(base64:["1","2","3"])
/// @param completion completion
+ (NSURLSessionDataTask *)uploadBulkImagesWithImgStr:(NSString *)imgStr completion:(void (^)(FeedbackRequestModel *requestModel))completion;
@end @end
NS_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END
...@@ -9,10 +9,10 @@ ...@@ -9,10 +9,10 @@
@implementation FeedbackRequestModel @implementation FeedbackRequestModel
+ (NSURLSessionDataTask *)adviceFeedbackRequestWithCompletion:(void (^)(FeedbackRequestModel *requestModel))completion { + (NSURLSessionDataTask *)adviceFeedbackRequestWithContent:(NSString *)content contentImg:(NSString *)contentImg completion:(void (^)(FeedbackRequestModel *requestModel))completion {
FeedbackRequestModel * requestModel = [[FeedbackRequestModel alloc] init]; FeedbackRequestModel * requestModel = [[FeedbackRequestModel alloc] init];
NSString *api = @"advice_feedback"; NSString *api = @"advice_feedback";
NSString *argStr = [NSString stringWithFormat:@"mutation{%@(title:\"%@\",content:\"%@\",content_img:\"%@\")}", api, @"title", @"content", @"content_img"]; NSString *argStr = [NSString stringWithFormat:@"mutation{%@(content:\"%@\",content_img:\"%@\")}", api, content, contentImg];
return [self httpPostBodyRequestWithAPI:api params:@{@"query" : argStr} view:nil hasNetActivity:YES loadingInfo:nil hasFailInfo:YES success:^(NSDictionary * _Nonnull apiDic) { return [self httpPostBodyRequestWithAPI:api params:@{@"query" : argStr} view:nil hasNetActivity:YES loadingInfo:nil hasFailInfo:YES success:^(NSDictionary * _Nonnull apiDic) {
DSLog(@"用户反馈接口apiDic:%@", apiDic); DSLog(@"用户反馈接口apiDic:%@", apiDic);
requestModel.resCode = DSResCodeSuccess; requestModel.resCode = DSResCodeSuccess;
...@@ -94,4 +94,20 @@ ...@@ -94,4 +94,20 @@
}]; }];
} }
+ (NSURLSessionDataTask *)uploadBulkImagesWithImgStr:(NSString *)imgStr completion:(void (^)(FeedbackRequestModel *requestModel))completion {
FeedbackRequestModel * requestModel = [[FeedbackRequestModel alloc] init];
NSString *api = @"upload_bulk_images";
NSString *argStr = [NSString stringWithFormat:@"mutation{%@(base64:%@)}", api, imgStr];
return [self httpPostBodyRequestWithAPI:api params:@{@"query" : argStr} view:nil hasNetActivity:YES loadingInfo:nil hasFailInfo:YES success:^(NSDictionary * _Nonnull apiDic) {
DSLog(@"批量上传图片接口apiDic:%@", apiDic);
requestModel.resCode = DSResCodeSuccess;
requestModel.result_imgurls = apiDic[@"result"];
completion(requestModel);
} failure:^(id _Nonnull failureInfo) {
requestModel.resCode = DSResCodeNetFail;
requestModel.errorInfo = failureInfo;
completion(requestModel);
}];
}
@end @end
...@@ -109,7 +109,7 @@ ...@@ -109,7 +109,7 @@
UserRequestModel * requestModel = [[UserRequestModel alloc] init]; UserRequestModel * requestModel = [[UserRequestModel alloc] init];
NSString *api = @"update_face_img"; NSString *api = @"update_face_img";
int user_id = [LoginUtils getUserID]; int user_id = [LoginUtils getUserID];
NSString *base64 = [faceImg imageToBase64Str:faceImg]; NSString *base64 = [UIImage imageToBase64Str:faceImg];
NSString *argStr = [NSString stringWithFormat:@"mutation{%@(user_id:%d,base64:\"%@\")}", api, user_id, base64]; NSString *argStr = [NSString stringWithFormat:@"mutation{%@(user_id:%d,base64:\"%@\")}", api, user_id, base64];
return [self httpPostBodyRequestWithAPI:api params:@{@"query" : argStr} view:nil hasNetActivity:YES loadingInfo:nil hasFailInfo:YES success:^(NSDictionary * _Nonnull apiDic) { return [self httpPostBodyRequestWithAPI:api params:@{@"query" : argStr} view:nil hasNetActivity:YES loadingInfo:nil hasFailInfo:YES success:^(NSDictionary * _Nonnull apiDic) {
DSLog(@"用户头像修改接口apiDic:%@", apiDic); DSLog(@"用户头像修改接口apiDic:%@", apiDic);
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!