QNFormUpload.m 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //
  2. // QNFormUpload.m
  3. // QiniuSDK
  4. //
  5. // Created by bailong on 15/1/4.
  6. // Copyright (c) 2015年 Qiniu. All rights reserved.
  7. //
  8. #import "QNDefine.h"
  9. #import "QNLogUtil.h"
  10. #import "QNFormUpload.h"
  11. #import "QNResponseInfo.h"
  12. #import "QNRequestTransaction.h"
  13. @interface QNFormUpload ()
  14. @property (nonatomic) float previousPercent;
  15. @property(nonatomic, strong)QNRequestTransaction *uploadTransaction;
  16. @end
  17. @implementation QNFormUpload
  18. - (void)startToUpload {
  19. QNLogInfo(@"key:%@ form上传", self.key);
  20. self.uploadTransaction = [[QNRequestTransaction alloc] initWithConfig:self.config
  21. uploadOption:self.option
  22. targetRegion:[self getTargetRegion]
  23. currentRegion:[self getCurrentRegion]
  24. key:self.key
  25. token:self.token];
  26. kQNWeakSelf;
  27. void(^progressHandler)(long long totalBytesWritten, long long totalBytesExpectedToWrite) = ^(long long totalBytesWritten, long long totalBytesExpectedToWrite){
  28. kQNStrongSelf;
  29. if (self.option.progressHandler) {
  30. float percent = (float)totalBytesWritten / (float)totalBytesExpectedToWrite;
  31. if (percent > 0.95) {
  32. percent = 0.95;
  33. }
  34. if (percent > self.previousPercent) {
  35. self.previousPercent = percent;
  36. } else {
  37. percent = self.previousPercent;
  38. }
  39. QNAsyncRunInMain(^{
  40. self.option.progressHandler(self.key, percent);
  41. });
  42. }
  43. };
  44. [self.uploadTransaction uploadFormData:self.data
  45. fileName:self.fileName
  46. progress:progressHandler
  47. complete:^(QNResponseInfo * _Nullable responseInfo, QNUploadRegionRequestMetrics * _Nullable metrics, NSDictionary * _Nullable response) {
  48. kQNStrongSelf;
  49. [self addRegionRequestMetricsOfOneFlow:metrics];
  50. if (!responseInfo.isOK) {
  51. if (![self switchRegionAndUploadIfNeededWithErrorResponse:responseInfo]) {
  52. [self complete:responseInfo response:response];
  53. }
  54. return;
  55. }
  56. QNAsyncRunInMain(^{
  57. self.option.progressHandler(self.key, 1.0);
  58. });
  59. [self complete:responseInfo response:response];
  60. }];
  61. }
  62. @end