From 512e6baeb8984de305e347d29c2916d0a214f370 Mon Sep 17 00:00:00 2001 From: fengshuo <963787902@qq.com> Date: Fri, 24 Sep 2021 11:49:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E4=B8=83=E7=89=9B?= =?UTF-8?q?=E7=9A=84SDK=20=E5=B9=B6=E4=B8=94=E4=B8=8A=E4=BC=A0=E5=A4=B4?= =?UTF-8?q?=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Podfile | 2 + Podfile.lock | 10 ++++- xplan-ios.xcodeproj/project.pbxproj | 14 +++++++ xplan-ios/Base/Tool/UploadImage/UploadImage.h | 26 +++++++++++++ xplan-ios/Base/Tool/UploadImage/UploadImage.m | 38 +++++++++++++++++++ xplan-ios/Info.plist | 6 +++ xplan-ios/Main/Mine/Api/Api+Mine.h | 3 ++ xplan-ios/Main/Mine/Api/Api+Mine.m | 6 +++ .../Presenter/XPMineUserInfoEditPresenter.h | 4 ++ .../Presenter/XPMineUserInfoEditPresenter.m | 20 +++++++++- .../Protocol/XPMineUserInfoEditProtocol.h | 2 + .../XPMineUserInfoEditViewController.m | 6 ++- 12 files changed, 134 insertions(+), 3 deletions(-) create mode 100644 xplan-ios/Base/Tool/UploadImage/UploadImage.h create mode 100644 xplan-ios/Base/Tool/UploadImage/UploadImage.m diff --git a/Podfile b/Podfile index d0ef74be..ffd4bc8e 100644 --- a/Podfile +++ b/Podfile @@ -22,6 +22,8 @@ target 'xplan-ios' do pod 'SZTextView' #轮播图 pod 'SDCycleScrollView' + #上传图片 + pod 'Qiniu' #登录的 pod 'mob_sharesdk' pod 'mob_sharesdk/ShareSDKPlatforms/QQ' diff --git a/Podfile.lock b/Podfile.lock index 080121d6..b9e3b347 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -15,6 +15,7 @@ PODS: - AFNetworking/UIKit (4.0.1): - AFNetworking/NSURLSession - FFPopup (1.1.5) + - HappyDNS (0.3.17) - Masonry (1.1.0) - MBProgressHUD (1.2.0) - MJExtension (3.3.0) @@ -34,6 +35,8 @@ PODS: - MOBFoundation (>= 3.2.9) - MOBFoundation (3.2.27) - NTESQuickPass (2.1.9) + - Qiniu (8.3.2): + - HappyDNS (~> 0.3.17) - ReactiveObjC (3.1.1) - SDCycleScrollView (1.82): - SDWebImage (>= 5.0.0) @@ -54,6 +57,7 @@ DEPENDENCIES: - mob_sharesdk/ShareSDKPlatforms/QQ - mob_sharesdk/ShareSDKPlatforms/WeChat - NTESQuickPass (~> 2.1.6) + - Qiniu - ReactiveObjC - SDCycleScrollView - SDWebImage @@ -64,12 +68,14 @@ SPEC REPOS: trunk: - AFNetworking - FFPopup + - HappyDNS - Masonry - MBProgressHUD - MJExtension - mob_sharesdk - MOBFoundation - NTESQuickPass + - Qiniu - ReactiveObjC - SDCycleScrollView - SDWebImage @@ -79,18 +85,20 @@ SPEC REPOS: SPEC CHECKSUMS: AFNetworking: 7864c38297c79aaca1500c33288e429c3451fdce FFPopup: a208dcee8db3e54ec4a88fcd6481f6f5d85b7a83 + HappyDNS: 848ef73e24f2b0e2752064223ce2dc0dd88900ea Masonry: 678fab65091a9290e40e2832a55e7ab731aad201 MBProgressHUD: 3ee5efcc380f6a79a7cc9b363dd669c5e1ae7406 MJExtension: 01704cca2b60a214c10761b6491eab74069d68a9 mob_sharesdk: a60006891a079486ff3269ed326adfa05a967c01 MOBFoundation: efdc3ce6b843fbc10ae8c1c6122a02b0d845b39b NTESQuickPass: 8431dc52737c95883cd382c2ee75664d58f39377 + Qiniu: 61f1e2fdfb35b37f98c8f03a718faf12652f9994 ReactiveObjC: 011caa393aa0383245f2dcf9bf02e86b80b36040 SDCycleScrollView: a0d74c3384caa72bdfc81470bdbc8c14b3e1fbcf SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d SZTextView: 094dc6acc9beec537685c545d6e3e0d4975174e1 YYText: 5c461d709e24d55a182d1441c41dc639a18a4849 -PODFILE CHECKSUM: a4cc983fad6d0cd9a7283a7dc7e989a39c24fc18 +PODFILE CHECKSUM: ad9235b352788673e6e5cf8b0d1b7c840428a840 COCOAPODS: 1.10.1 diff --git a/xplan-ios.xcodeproj/project.pbxproj b/xplan-ios.xcodeproj/project.pbxproj index 62af85c0..346156be 100644 --- a/xplan-ios.xcodeproj/project.pbxproj +++ b/xplan-ios.xcodeproj/project.pbxproj @@ -160,6 +160,7 @@ E8B825CA26EA1231009E8E9F /* LoginVerifCodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E8B825C826EA1231009E8E9F /* LoginVerifCodeViewController.m */; }; E8B825CD26EA18C8009E8E9F /* ThemeColor.m in Sources */ = {isa = PBXBuildFile; fileRef = E8B825CC26EA18C8009E8E9F /* ThemeColor.m */; }; E8B825D026EA3825009E8E9F /* LoginPasswordViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E8B825CF26EA3825009E8E9F /* LoginPasswordViewController.m */; }; + E8B846BC26FD7C1200A777FE /* UploadImage.m in Sources */ = {isa = PBXBuildFile; fileRef = E8B846BB26FD7C1200A777FE /* UploadImage.m */; }; E8CEA03D26EA3DE500644B44 /* LoginPasswordPresent.m in Sources */ = {isa = PBXBuildFile; fileRef = E8CEA03C26EA3DE500644B44 /* LoginPasswordPresent.m */; }; E8E70D7726F2F15100F03460 /* XPMineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E70D7626F2F15100F03460 /* XPMineViewController.m */; }; E8E70D7A26F2F16600F03460 /* XPMinePresent.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E70D7926F2F16600F03460 /* XPMinePresent.m */; }; @@ -477,6 +478,8 @@ E8B825CC26EA18C8009E8E9F /* ThemeColor.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ThemeColor.m; sourceTree = ""; }; E8B825CE26EA3825009E8E9F /* LoginPasswordViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginPasswordViewController.h; sourceTree = ""; }; E8B825CF26EA3825009E8E9F /* LoginPasswordViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoginPasswordViewController.m; sourceTree = ""; }; + E8B846BA26FD7C1200A777FE /* UploadImage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UploadImage.h; sourceTree = ""; }; + E8B846BB26FD7C1200A777FE /* UploadImage.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UploadImage.m; sourceTree = ""; }; E8CEA03B26EA3DE500644B44 /* LoginPasswordPresent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginPasswordPresent.h; sourceTree = ""; }; E8CEA03C26EA3DE500644B44 /* LoginPasswordPresent.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoginPasswordPresent.m; sourceTree = ""; }; E8CEA03E26EA3E0200644B44 /* LoginPasswordProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LoginPasswordProtocol.h; sourceTree = ""; }; @@ -910,6 +913,7 @@ 189DD5A726DFA09700AB55B1 /* Tool */ = { isa = PBXGroup; children = ( + E8B846B926FD7BE600A777FE /* UploadImage */, E8EEB8EA26FC2050007C6EBA /* SDPhotoBrowser */, E81366E426F0A4820076364C /* NSString */, E82109AA26F1C86E00FC3319 /* CountDown */, @@ -1200,6 +1204,15 @@ path = Model; sourceTree = ""; }; + E8B846B926FD7BE600A777FE /* UploadImage */ = { + isa = PBXGroup; + children = ( + E8B846BA26FD7C1200A777FE /* UploadImage.h */, + E8B846BB26FD7C1200A777FE /* UploadImage.m */, + ); + path = UploadImage; + sourceTree = ""; + }; E8E70D6E26F2EB1200F03460 /* Mine */ = { isa = PBXGroup; children = ( @@ -1642,6 +1655,7 @@ 187EEEDC26E89B32002833B2 /* BaseModel.m in Sources */, E81366FC26F0D2980076364C /* UIButton+EnlargeTouchArea.m in Sources */, E824546426F5FF1C00BE8163 /* XPMineResetPayPasswordPresenter.m in Sources */, + E8B846BC26FD7C1200A777FE /* UploadImage.m in Sources */, 186A534D26FC6ED900D67B2C /* TTActionSheetView.m in Sources */, E88B5CC126FB407B00DA9178 /* XPMineUserInfoViewController.m in Sources */, E824545926F5E65900BE8163 /* XPMineVerifIdentityView.m in Sources */, diff --git a/xplan-ios/Base/Tool/UploadImage/UploadImage.h b/xplan-ios/Base/Tool/UploadImage/UploadImage.h new file mode 100644 index 00000000..82aa237e --- /dev/null +++ b/xplan-ios/Base/Tool/UploadImage/UploadImage.h @@ -0,0 +1,26 @@ +// +// UploadImage.h +// xplan-ios +// +// Created by 冯硕 on 2021/9/24. +// 上传图片类 + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface UploadImage : NSObject +/// 上传一个Image +/// @param image 图片 +/// @param imageName 图片的名字 +/// @param token token +/// @param success 成功 +/// @param failure 失败 ++ (void)uploadImage:(UIImage *)image + named:(NSString *)imageName + token:(NSString *)token + success:(void (^)(NSString *key, NSDictionary *resp))success + failure:(void (^)(NSNumber *resCode, NSString *message))failure; +@end + +NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Base/Tool/UploadImage/UploadImage.m b/xplan-ios/Base/Tool/UploadImage/UploadImage.m new file mode 100644 index 00000000..04f437ad --- /dev/null +++ b/xplan-ios/Base/Tool/UploadImage/UploadImage.m @@ -0,0 +1,38 @@ +// +// UploadImage.m +// xplan-ios +// +// Created by 冯硕 on 2021/9/24. +// + +#import "UploadImage.h" +#import + +@implementation UploadImage + +/// 上传一个Image +/// @param image 图片 +/// @param imageName 图片的名字 +/// @param token token +/// @param success 成功 +/// @param failure 失败 ++ (void)uploadImage:(UIImage *)image + named:(NSString *)imageName + token:(NSString *)token + success:(void (^)(NSString *key, NSDictionary *resp))success + failure:(void (^)(NSNumber *resCode, NSString *message))failure{ + QNConfiguration *config = [QNConfiguration build:^(QNConfigurationBuilder *builder) { + builder.zone = [QNFixedZone zone2]; + + }]; + QNUploadManager *upManager = [[QNUploadManager alloc] initWithConfiguration:config]; + NSData *data = UIImageJPEGRepresentation(image, 0.5); + [upManager putData:data key:imageName token:token complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) { + if (resp) { + success(key,resp); + }else{ + failure(@(info.statusCode),info.error.localizedDescription); + } + } option:nil]; +} +@end diff --git a/xplan-ios/Info.plist b/xplan-ios/Info.plist index 9d63329e..0c61908c 100644 --- a/xplan-ios/Info.plist +++ b/xplan-ios/Info.plist @@ -2,6 +2,12 @@ + NSPhotoLibraryAddUsageDescription + “音游”需要您的同意,才可以存储相片到相册 + NSPhotoLibraryUsageDescription + “音游”需要您的同意,才可以访问相册并选择您需要上传的图片,然后展示在您的个人主页上,便于他人查看 + NSCameraUsageDescription + “音游”需要您的同意,才可以访问进行拍照并上传您的图片,然后展示在您的个人主页上,便于他人查看 CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName diff --git a/xplan-ios/Main/Mine/Api/Api+Mine.h b/xplan-ios/Main/Mine/Api/Api+Mine.h index 9382bcf5..b988b8b1 100644 --- a/xplan-ios/Main/Mine/Api/Api+Mine.h +++ b/xplan-ios/Main/Mine/Api/Api+Mine.h @@ -71,6 +71,9 @@ NS_ASSUME_NONNULL_BEGIN password:(NSString *)password status:(NSNumber *)status uid:(NSString *)uid; +/// 上传七牛获取token +/// @param complection 完成 ++ (void)qiniuUpLoadImageWithComplection:(HttpRequestHelperCompletion)complection; @end NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/Api/Api+Mine.m b/xplan-ios/Main/Mine/Api/Api+Mine.m index 41a725d1..e58f7621 100644 --- a/xplan-ios/Main/Mine/Api/Api+Mine.m +++ b/xplan-ios/Main/Mine/Api/Api+Mine.m @@ -72,4 +72,10 @@ + (void)openOrCloseParentModelWithComplection:(HttpRequestHelperCompletion)complection password:(NSString *)password status:(NSNumber *)status uid:(NSString *)uid { [self makeRequest:@"user/openOrClose" method:HttpRequestHelperMethodPOST completion:complection, __FUNCTION__, password,status,uid, nil]; } + +/// 上传七牛获取token +/// @param complection 完成 ++ (void)qiniuUpLoadImageWithComplection:(HttpRequestHelperCompletion)complection { + [self makeRequest:@"qiniu/upload/getUploadToken" method:HttpRequestHelperMethodGET completion:complection, __FUNCTION__, nil]; +} @end diff --git a/xplan-ios/Main/Mine/Presenter/XPMineUserInfoEditPresenter.h b/xplan-ios/Main/Mine/Presenter/XPMineUserInfoEditPresenter.h index 5c982978..c3ece8d8 100644 --- a/xplan-ios/Main/Mine/Presenter/XPMineUserInfoEditPresenter.h +++ b/xplan-ios/Main/Mine/Presenter/XPMineUserInfoEditPresenter.h @@ -26,6 +26,10 @@ NS_ASSUME_NONNULL_BEGIN nick:(NSString * _Nullable)nick birth:(NSString * _Nullable)birth userDesc:(NSString * _Nullable)userDesc; + +/// 上传头像 +/// @param avatar 头像 +- (void)uploadAvatar:(UIImage *)avatar; @end NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/Presenter/XPMineUserInfoEditPresenter.m b/xplan-ios/Main/Mine/Presenter/XPMineUserInfoEditPresenter.m index 02c2f307..3806dd3c 100644 --- a/xplan-ios/Main/Mine/Presenter/XPMineUserInfoEditPresenter.m +++ b/xplan-ios/Main/Mine/Presenter/XPMineUserInfoEditPresenter.m @@ -7,9 +7,10 @@ #import "XPMineUserInfoEditPresenter.h" ///Api -#import "Api.h" +#import "Api+Mine.h" ///Tool #import "AccountInfoStorage.h" +#import "UploadImage.h" ///Model #import "XPMineUserInfoEditModel.h" #import "UserInfoModel.h" @@ -105,6 +106,23 @@ }] userInfo:dic]; } + +/// 上传头像 +/// @param avatar 头像 +- (void)uploadAvatar:(UIImage *)avatar { + [Api qiniuUpLoadImageWithComplection:[self createHttpCompletion:^(BaseModel * _Nonnull data) { + NSString *key = data.data[@"key"]; + NSString *token = data.data[@"token"]; + [UploadImage uploadImage:avatar named:key token:token success:^(NSString * _Nonnull key, NSDictionary * _Nonnull resp) { + NSString *url = resp[@"path"]; + [[self getView] uploadImageSuccess:url]; + } failure:^(NSNumber * _Nonnull resCode, NSString * _Nonnull message) { + [[self getView] showErrorToast:@"上传失败"]; + }]; + }]]; +} + + #pragma mark - Getters And Setters - (XPMineUserInfoEditModel *)nickItem { if (!_nickItem) { diff --git a/xplan-ios/Main/Mine/Protocol/XPMineUserInfoEditProtocol.h b/xplan-ios/Main/Mine/Protocol/XPMineUserInfoEditProtocol.h index a586092e..1349eed5 100644 --- a/xplan-ios/Main/Mine/Protocol/XPMineUserInfoEditProtocol.h +++ b/xplan-ios/Main/Mine/Protocol/XPMineUserInfoEditProtocol.h @@ -16,6 +16,8 @@ NS_ASSUME_NONNULL_BEGIN - (void)complementUserInfoSuccess; ///获取用户信息成功 - (void)onGetUserInfoSuccess:(UserInfoModel *)userInfo; +/// 上传头像成功 +- (void)uploadImageSuccess:(NSString *)url; @end NS_ASSUME_NONNULL_END diff --git a/xplan-ios/Main/Mine/View/MineInfo/XPMineUserInfoEditViewController.m b/xplan-ios/Main/Mine/View/MineInfo/XPMineUserInfoEditViewController.m index 4250765d..a82b39ac 100644 --- a/xplan-ios/Main/Mine/View/MineInfo/XPMineUserInfoEditViewController.m +++ b/xplan-ios/Main/Mine/View/MineInfo/XPMineUserInfoEditViewController.m @@ -199,7 +199,7 @@ if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) { UIImageWriteToSavedPhotosAlbum(selectedPhoto, nil, nil, nil); } -#warning to do 上传图片 + [self.presenter uploadAvatar:selectedPhoto]; } [picker dismissViewControllerAnimated:YES completion:^{}]; } @@ -250,6 +250,10 @@ self.userInfo = userInfo; [self.presenter getUserInfoEditDataSourceWithUserInfo:self.userInfo]; } + +- (void)uploadImageSuccess:(NSString *)url { + [self.presenter complectionInfoWithAvatar:url nick:nil birth:nil userDesc:nil]; +} #pragma mark - Getters And Setters - (UITableView *)tableView { if (!_tableView) {