解决了语音上传到问题,接下来要解决下载播放问题
This commit is contained in:
148
Pods/Qiniu/QiniuSDK/Storage/QNPartsUploadPerformerV2.m
generated
Normal file
148
Pods/Qiniu/QiniuSDK/Storage/QNPartsUploadPerformerV2.m
generated
Normal file
@@ -0,0 +1,148 @@
|
||||
//
|
||||
// QNPartsUploadApiV2.m
|
||||
// QiniuSDK
|
||||
//
|
||||
// Created by yangsen on 2020/11/30.
|
||||
// Copyright © 2020 Qiniu. All rights reserved.
|
||||
//
|
||||
|
||||
#import "QNLogUtil.h"
|
||||
#import "QNDefine.h"
|
||||
#import "QNRequestTransaction.h"
|
||||
#import "QNUploadInfoV2.h"
|
||||
#import "QNPartsUploadPerformerV2.h"
|
||||
|
||||
@interface QNPartsUploadPerformerV2()
|
||||
@end
|
||||
@implementation QNPartsUploadPerformerV2
|
||||
|
||||
- (QNUploadInfo *)getFileInfoWithDictionary:(NSDictionary *)fileInfoDictionary {
|
||||
return [QNUploadInfoV2 info:self.uploadSource dictionary:fileInfoDictionary];
|
||||
}
|
||||
|
||||
- (QNUploadInfo *)getDefaultUploadInfo {
|
||||
return [QNUploadInfoV2 info:self.uploadSource configuration:self.config];
|
||||
}
|
||||
|
||||
- (void)serverInit:(void(^)(QNResponseInfo * _Nullable responseInfo,
|
||||
QNUploadRegionRequestMetrics * _Nullable metrics,
|
||||
NSDictionary * _Nullable response))completeHandler {
|
||||
|
||||
QNUploadInfoV2 *uploadInfo = (QNUploadInfoV2 *)self.uploadInfo;
|
||||
if (uploadInfo && [uploadInfo isValid]) {
|
||||
QNLogInfo(@"key:%@ serverInit success", self.key);
|
||||
QNResponseInfo *responseInfo = [QNResponseInfo successResponse];
|
||||
completeHandler(responseInfo, nil, nil);
|
||||
return;
|
||||
}
|
||||
|
||||
QNRequestTransaction *transaction = [self createUploadRequestTransaction];
|
||||
|
||||
kQNWeakSelf;
|
||||
kQNWeakObj(transaction);
|
||||
[transaction initPart:^(QNResponseInfo * _Nullable responseInfo, QNUploadRegionRequestMetrics * _Nullable metrics, NSDictionary * _Nullable response) {
|
||||
kQNStrongSelf;
|
||||
kQNStrongObj(transaction);
|
||||
|
||||
NSString *uploadId = response[@"uploadId"];
|
||||
NSNumber *expireAt = response[@"expireAt"];
|
||||
if (responseInfo.isOK && uploadId && expireAt) {
|
||||
uploadInfo.uploadId = uploadId;
|
||||
uploadInfo.expireAt = expireAt;
|
||||
[self recordUploadInfo];
|
||||
}
|
||||
completeHandler(responseInfo, metrics, response);
|
||||
[self destroyUploadRequestTransaction:transaction];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)uploadNextData:(void(^)(BOOL stop,
|
||||
QNResponseInfo * _Nullable responseInfo,
|
||||
QNUploadRegionRequestMetrics * _Nullable metrics,
|
||||
NSDictionary * _Nullable response))completeHandler {
|
||||
QNUploadInfoV2 *uploadInfo = (QNUploadInfoV2 *)self.uploadInfo;
|
||||
|
||||
NSError *error = nil;
|
||||
QNUploadData *data = nil;
|
||||
@synchronized (self) {
|
||||
data = [uploadInfo nextUploadData:&error];
|
||||
data.state = QNUploadStateUploading;
|
||||
}
|
||||
|
||||
if (error) {
|
||||
QNResponseInfo *responseInfo = [QNResponseInfo responseInfoWithLocalIOError:[NSString stringWithFormat:@"%@", error]];
|
||||
completeHandler(YES, responseInfo, nil, nil);
|
||||
return;
|
||||
}
|
||||
|
||||
// 上传完毕
|
||||
if (data == nil) {
|
||||
QNLogInfo(@"key:%@ no data left", self.key);
|
||||
|
||||
QNResponseInfo *responseInfo = nil;
|
||||
if (uploadInfo.getSourceSize == 0) {
|
||||
responseInfo = [QNResponseInfo responseInfoOfZeroData:@"file is empty"];
|
||||
} else {
|
||||
responseInfo = [QNResponseInfo responseInfoWithSDKInteriorError:@"no chunk left"];
|
||||
}
|
||||
completeHandler(YES, responseInfo, nil, nil);
|
||||
return;
|
||||
}
|
||||
|
||||
kQNWeakSelf;
|
||||
void (^progress)(long long, long long) = ^(long long totalBytesWritten, long long totalBytesExpectedToWrite){
|
||||
kQNStrongSelf;
|
||||
data.uploadSize = totalBytesWritten;
|
||||
[self notifyProgress:false];
|
||||
};
|
||||
|
||||
QNRequestTransaction *transaction = [self createUploadRequestTransaction];
|
||||
|
||||
kQNWeakObj(transaction);
|
||||
[transaction uploadPart:uploadInfo.uploadId
|
||||
partIndex:[uploadInfo getPartIndexOfData:data]
|
||||
partData:data.data
|
||||
progress:progress
|
||||
complete:^(QNResponseInfo * _Nullable responseInfo, QNUploadRegionRequestMetrics * _Nullable metrics, NSDictionary * _Nullable response) {
|
||||
kQNStrongSelf;
|
||||
kQNStrongObj(transaction);
|
||||
|
||||
NSString *etag = response[@"etag"];
|
||||
NSString *md5 = response[@"md5"];
|
||||
if (responseInfo.isOK && etag && md5) {
|
||||
data.etag = etag;
|
||||
data.state = QNUploadStateComplete;
|
||||
[self recordUploadInfo];
|
||||
[self notifyProgress:false];
|
||||
} else {
|
||||
data.state = QNUploadStateWaitToUpload;
|
||||
}
|
||||
completeHandler(NO, responseInfo, metrics, response);
|
||||
[self destroyUploadRequestTransaction:transaction];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)completeUpload:(void(^)(QNResponseInfo * _Nullable responseInfo,
|
||||
QNUploadRegionRequestMetrics * _Nullable metrics,
|
||||
NSDictionary * _Nullable response))completeHandler {
|
||||
|
||||
QNUploadInfoV2 *uploadInfo = (QNUploadInfoV2 *)self.uploadInfo;
|
||||
|
||||
NSArray *partInfoArray = [uploadInfo getPartInfoArray];
|
||||
QNRequestTransaction *transaction = [self createUploadRequestTransaction];
|
||||
|
||||
kQNWeakSelf;
|
||||
kQNWeakObj(transaction);
|
||||
[transaction completeParts:self.fileName uploadId:uploadInfo.uploadId partInfoArray:partInfoArray complete:^(QNResponseInfo * _Nullable responseInfo, QNUploadRegionRequestMetrics * _Nullable metrics, NSDictionary * _Nullable response) {
|
||||
kQNStrongSelf;
|
||||
kQNStrongObj(transaction);
|
||||
if (responseInfo.isOK) {
|
||||
[self notifyProgress:true];
|
||||
}
|
||||
completeHandler(responseInfo, metrics, response);
|
||||
[self destroyUploadRequestTransaction:transaction];
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user