SyFlutterQiniuStoragePlugin.m 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #import "SyFlutterQiniuStoragePlugin.h"
  2. #import "QiniuSDK.h"
  3. @interface SyFlutterQiniuStoragePlugin() <FlutterStreamHandler>
  4. @property BOOL isCanceled;
  5. @property FlutterEventSink eventSink;
  6. @end
  7. @implementation SyFlutterQiniuStoragePlugin
  8. + (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
  9. NSString *eventChannelName = @"sy_flutter_qiniu_storage_event";
  10. FlutterMethodChannel* channel = [FlutterMethodChannel
  11. methodChannelWithName:@"sy_flutter_qiniu_storage"
  12. binaryMessenger:[registrar messenger]];
  13. FlutterEventChannel *eventChannel = [FlutterEventChannel eventChannelWithName:eventChannelName binaryMessenger:registrar.messenger];
  14. SyFlutterQiniuStoragePlugin* instance = [[SyFlutterQiniuStoragePlugin alloc] init];
  15. [registrar addMethodCallDelegate:instance channel:channel];
  16. [eventChannel setStreamHandler:instance];
  17. }
  18. - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
  19. if ([@"getPlatformVersion" isEqualToString:call.method]) {
  20. result([@"iOS " stringByAppendingString:[[UIDevice currentDevice] systemVersion]]);
  21. }else if ([@"upload" isEqualToString:call.method]){
  22. [self upload:call result:result];
  23. } else if ([@"cancelUpload" isEqualToString:call.method]){
  24. [self cancelUpload:call result:result];
  25. }else {
  26. result(FlutterMethodNotImplemented);
  27. }
  28. }
  29. - (void)upload:(FlutterMethodCall*)call result:(FlutterResult)result{
  30. self.isCanceled = FALSE;
  31. NSString *filepath = call.arguments[@"filepath"];
  32. NSString *key = call.arguments[@"key"];
  33. NSString *token = call.arguments[@"token"];
  34. QNUploadOption *opt = [[QNUploadOption alloc] initWithMime:nil progressHandler:^(NSString *key, float percent) {
  35. NSLog(@"progress %f",percent);
  36. self.eventSink(@(percent));
  37. } params:nil checkCrc:NO cancellationSignal:^BOOL{
  38. return self.isCanceled;
  39. }];
  40. QNUploadManager *manager = [[QNUploadManager alloc] init];
  41. [manager putFile:filepath key:key token:token complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
  42. NSLog(@"info %@", info);
  43. NSLog(@"resp %@",resp);
  44. NSString *errorStr;
  45. NSDictionary *resultDict;
  46. if (info.error) {
  47. errorStr = info.error.description;
  48. resultDict = @{};
  49. }else{
  50. errorStr = @"";
  51. resultDict = resp;
  52. }
  53. NSDictionary *dictionary = @{
  54. @"success": @(info.ok),
  55. @"key": key,
  56. @"error": errorStr,
  57. @"result": resultDict,
  58. };
  59. NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:nil];
  60. NSString *string = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  61. result(string);
  62. } option:(QNUploadOption *) opt];
  63. }
  64. - (void)cancelUpload:(FlutterMethodCall*)call result:(FlutterResult)result{
  65. self.isCanceled = TRUE;
  66. }
  67. - (FlutterError * _Nullable)onCancelWithArguments:(id _Nullable)arguments {
  68. self.isCanceled = TRUE;
  69. self.eventSink = nil;
  70. return nil;
  71. }
  72. - (FlutterError * _Nullable)onListenWithArguments:(id _Nullable)arguments eventSink:(nonnull FlutterEventSink)events {
  73. self.isCanceled = FALSE;
  74. self.eventSink = events;
  75. return nil;
  76. }
  77. @end