@@ -79,6 +79,7 @@ - (instancetype) init
7979 }
8080 _requestCacheArray = [NSPointerArray weakObjectsPointerArray ];
8181 _aborted = NO ;
82+ _enableMD5Verification = YES ;
8283 _recursiveLock = [NSRecursiveLock new ];
8384 _progressLock = [NSRecursiveLock new ];
8485 return self;
@@ -193,32 +194,33 @@ - (void) startSimpleUpload
193194 if (error) {
194195 [weakSelf onError: error];
195196 [self cancel ];
196- } else {
197+ } else {
197198 QCloudUploadObjectResult* result = [QCloudUploadObjectResult new ];
198- result.eTag = [outputObject valueForKey: @" Etag" ];
199199 if (outputObject[@" x-cos-version-id" ]) {
200200 result.versionID = outputObject[@" x-cos-version-id" ];
201201 }
202202
203- NSString * localMD5 ;
204- if ([weakSelf.body isKindOfClass: [NSData class ]]) {
205- localMD5 = QCloudEncrytNSDataMD5 (weakSelf.body );
206- } else if ([weakSelf.body isKindOfClass: [NSURL class ]]) {
207- localMD5 = QCloudEncrytFileMD5 (((NSURL *)weakSelf.body ).path );
208- }
209- NSString * MD5FromCOS = [result.eTag substringWithRange: NSMakeRange (1 , result.eTag.length - 2 )];
210- if (![localMD5.lowercaseString isEqualToString: MD5FromCOS]) {
211- NSMutableString * errorMessageString = [[NSMutableString alloc ] init ];
212- [errorMessageString appendFormat: @" 简单上传过程中MD5校验与本地不一致,请检查本地文件在上传过程中是否发生了变化,建议调用删除接口将COS上的文件删除并重新上传" ];
213- if ( outputObject[@" x-cos-request-id" ]!= nil ) {
214- NSString * requestID = outputObject[@" x-cos-request-id" ];
215- [errorMessageString appendFormat: @" , Request id:%@ " ,requestID];
203+ if (self.enableMD5Verification ) {
204+ result.eTag = [outputObject valueForKey: @" Etag" ];
205+ NSString * localMD5 ;
206+ if ([weakSelf.body isKindOfClass: [NSData class ]]) {
207+ localMD5 = QCloudEncrytNSDataMD5 (weakSelf.body );
208+ } else if ([weakSelf.body isKindOfClass: [NSURL class ]]) {
209+ localMD5 = QCloudEncrytFileMD5 (((NSURL *)weakSelf.body ).path );
210+ }
211+ NSString * MD5FromCOS = [result.eTag substringWithRange: NSMakeRange (1 , result.eTag.length - 2 )];
212+ if ( (localMD5 != nil ) && (![localMD5.lowercaseString isEqualToString: MD5FromCOS]) ) {
213+ NSMutableString * errorMessageString = [[NSMutableString alloc ] init ];
214+ [errorMessageString appendFormat: @" 简单上传过程中MD5校验与本地不一致,请检查本地文件在上传过程中是否发生了变化,建议调用删除接口将COS上的文件删除并重新上传" ];
215+ if ( outputObject[@" x-cos-request-id" ]!= nil ) {
216+ NSString * requestID = outputObject[@" x-cos-request-id" ];
217+ [errorMessageString appendFormat: @" , Request id:%@ " ,requestID];
218+ }
219+ NSError * error = [NSError qcloud_errorWithCode: QCloudNetworkErrorCodeMD5NotMatch message: errorMessageString];
220+ [weakSelf onError: error];
221+ return ;
216222 }
217- NSError * error = [NSError qcloud_errorWithCode: QCloudNetworkErrorCodeMD5NotMatch message: errorMessageString];
218- [weakSelf onError: error];
219- return ;
220223 }
221-
222224 result.key = weakSelf.object ;
223225 result.bucket = weakSelf.bucket ;
224226 result.location = QCloudCOSXMLObjectLocation (weakSelf.transferManager .configuration .endpoint ,
@@ -391,24 +393,26 @@ - (void) uploadOffsetBodys:(NSArray<QCloudFileOffsetBody*>*)allParts
391393 if (!self.canceled ) {
392394 [strongSelf cancel ];
393395 }
394- } else {
396+ } else {
395397
396- NSString * MD5FromeETag = [outputObject.eTag substringWithRange: NSMakeRange (1 , outputObject.eTag.length-2 )];
397- NSString * localMD5String = [QCloudEncrytFileOffsetMD5 (body.fileURL.path, body.offset, body.sliceLength) lowercaseString ];
398- if (![MD5FromeETag isEqualToString: localMD5String]) {
399- NSMutableString * errorMessageString = [[NSMutableString alloc ] init ];
400- [errorMessageString appendFormat: @" 分片上传过程中MD5校验与本地不一致,请检查本地文件在上传过程中是否发生了变化,建议调用删除接口将COS上的文件删除并重新上传" ];
401- if ( [outputObject __originHTTPURLResponse__ ]&& [[outputObject __originHTTPURLResponse__ ].allHeaderFields valueForKey: @" x-cos-request-id" ]!= nil ) {
402- NSString * requestID = [[outputObject __originHTTPURLResponse__ ].allHeaderFields valueForKey: @" x-cos-request-id" ];
403- [errorMessageString appendFormat: @" , Request id:%@ " ,requestID];
398+ if (self.enableMD5Verification ) {
399+
400+ NSString * MD5FromeETag = [outputObject.eTag substringWithRange: NSMakeRange (1 , outputObject.eTag.length-2 )];
401+ NSString * localMD5String = [QCloudEncrytFileOffsetMD5 (body.fileURL.path, body.offset, body.sliceLength) lowercaseString ];
402+ if (![MD5FromeETag isEqualToString: localMD5String]) {
403+ NSMutableString * errorMessageString = [[NSMutableString alloc ] init ];
404+ [errorMessageString appendFormat: @" 分片上传过程中MD5校验与本地不一致,请检查本地文件在上传过程中是否发生了变化,建议调用删除接口将COS上的文件删除并重新上传" ];
405+ if ( [outputObject __originHTTPURLResponse__ ]&& [[outputObject __originHTTPURLResponse__ ].allHeaderFields valueForKey: @" x-cos-request-id" ]!= nil ) {
406+ NSString * requestID = [[outputObject __originHTTPURLResponse__ ].allHeaderFields valueForKey: @" x-cos-request-id" ];
407+ [errorMessageString appendFormat: @" , Request id:%@ " ,requestID];
408+ }
409+ NSError * error = [NSError qcloud_errorWithCode: QCloudNetworkErrorCodeMD5NotMatch message: errorMessageString];
410+ [weakSelf onError: error];
411+ [weakSelf cancel ];
412+ return ;
404413 }
405- NSError * error = [NSError qcloud_errorWithCode: QCloudNetworkErrorCodeMD5NotMatch message: errorMessageString];
406- [weakSelf onError: error];
407- [weakSelf cancel ];
408- return ;
409414 }
410415
411-
412416 QCloudMultipartInfo* info = [QCloudMultipartInfo new ];
413417 info.eTag = outputObject.eTag ;
414418 info.partNumber = [@(body.index+1 ) stringValue ];
0 commit comments