Files
featherVoice/Pods/QCloudCOSXML/QCloudCOSXML/Classes/Transfer/request/QCloudCOSXMLUploadObjectRequest.h
2025-10-24 10:52:40 +08:00

173 lines
6.9 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// QCloudCOSXMLUploadObjectRequest.h
// Pods
//
// Created by Dong Zhao on 2017/5/23.
//
//
#import <QCloudCore/QCloudCore.h>
#import "QCloudCOSStorageClassEnum.h"
NS_ASSUME_NONNULL_BEGIN
FOUNDATION_EXTERN NSString *_Nullable const QCloudUploadResumeDataKey;
typedef NSData *QCloudCOSXMLUploadObjectResumeData;
@class QCloudUploadObjectResult;
@class QCloudInitiateMultipartUploadResult;
@class QCloudCOSXMLUploadObjectRequest;
typedef void (^InitMultipleUploadFinishBlock)(QCloudInitiateMultipartUploadResult *_Nullable multipleUploadInitResult,
QCloudCOSXMLUploadObjectResumeData _Nullable resumeData);
typedef void (^RequestsMetricArrayBlock)(NSMutableArray *_Nullable requstMetricArray);
/**
COSXML上传对象接口。在上传小于1MB的文件时通过该request来上传的话会生成一个简单上传putObjectRequset
将整个对象直接上传。
如果上传的对象大小大于1MB时我们会在内部进行分片上传的处理将文件切分成数个1MB大小的块
然后通过并行分快上传的方式进行上传。
### 示例
@code
QCloudCOSXMLUploadObjectRequest* put = [QCloudCOSXMLUploadObjectRequest new];
NSURL* url = @"文件的URL";
put.object = @"文件名.jpg";
put.bucket = @"bucket名";
put.body = url;
[put setSendProcessBlock:^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) {
NSLog(@"upload %lld totalSend %lld aim %lld", bytesSent, totalBytesSent, totalBytesExpectedToSend);
}];
[put setFinishBlock:^(id outputObject, NSError *error) {
}];
[[QCloudCOSTransferMangerService defaultCOSTRANSFERMANGER] UploadObject:put];
*/
@interface QCloudCOSXMLUploadObjectRequest<BodyType> : QCloudAbstractRequest
//自定义分片大小
@property (nonatomic, assign) NSUInteger sliceSize;
//自定义分片阈值
@property (nonatomic, assign) NSInteger mutilThreshold;
@property (nonatomic, assign) QCloudAbstractRequestPriority uploadPriority;
/**
上传文件对象的文件名也是对象的key请注意文件名中不可以含有问号即"?"字符
*/
@property (strong, nonatomic) NSString *object;
@property (strong, nonatomic) QCloudHTTPRetryHanlder *_Nullable retryHandler;
/**
存储桶名称
*/
@property (strong, nonatomic) NSString *bucket;
/**
需要上传的对象内容。可以传入NSData*或者NSURL*类型的变量
*/
@property (strong, nonatomic) BodyType body;
/**
RFC 2616 中定义用于指示资源的MIME类型将作为 Object 元数据保存
*/
@property (strong, nonatomic) NSString *contentType;
/**
RFC 2616 中定义的缓存策略,将作为 Object 元数据保存
*/
@property (strong, nonatomic) NSString *cacheControl;
/**
RFC 2616 中定义的文件名称,将作为 Object 元数据保存
*/
@property (strong, nonatomic) NSString *contentDisposition;
/**
当使用 Expect: 100-continue 时,在收到服务端确认后,才会发送请求内容
*/
@property (strong, nonatomic) NSString *expect;
/**
RFC 2616 中定义的过期时间,将作为 Object 元数据保存
*/
@property (strong, nonatomic) NSString *expires;
@property (strong, nonatomic) NSString *contentSHA1;
//针对本次上传进行流量控制的限速值,必须为数字,单位默认为 bit/s。限速值设置范围为819200 - 838860800,即100KB/s - 100MB/s如果超出该范围将返回400错误
@property (nonatomic, assign) NSInteger trafficLimit;
/**
对象的存储级别
*/
@property (assign, nonatomic) QCloudCOSStorageClass storageClass;
/**
定义 Object 的 ACL(Access Control List) 属性。有效值privatepublic-read-writepublic-read,默认值private
*/
@property (strong, nonatomic) NSString *accessControlList;
/**
赋予被授权者读的权限。格式id=" ",id=" "
当需要给子账户授权时id="qcs::cam::uin/\<OwnerUin>:uin/\<SubUin>"
当需要给根账户授权时id="qcs::cam::uin/\<OwnerUin>:uin/\<OwnerUin>"
*/
@property (strong, nonatomic) NSString *grantRead;
/**
赋予被授权者读写权限。格式: id=" ",id=" "
当需要给子账户授权时id="qcs::cam::uin/\<OwnerUin>:uin/\<SubUin>"
当需要给根账户授权时id="qcs::cam::uin/\<OwnerUin>:uin/\<OwnerUin>"
*/
@property (strong, nonatomic) NSString *grantFullControl;
/**
表明该请求是否已经被中断
*/
@property (assign, atomic, readonly) BOOL aborted;
/**
如果该request产生了分片上传的请求那么在分片上传初始化完成后会通过这个block来回调
可以在该回调block中获取分片完成后的bucket, key, uploadID,以及用于后续上传失败后恢复上传的ResumeData。
*/
@property (nonatomic, copy) InitMultipleUploadFinishBlock initMultipleUploadFinishBlock;
@property (nonatomic, copy) RequestsMetricArrayBlock requstsMetricArrayBlock;
/**
是否在上传完成以后,将 COS 返回的文件MD5与本地文件算出来的md5进行校验。默认开启如果校验出错
文件仍然会被上传到 COS, 不过我们会在本地抛出校验失败的error。
*/
@property (nonatomic, assign) BOOL enableMD5Verification __attribute__((deprecated("该属性已过期请用enableVerification替换")));
/**
是否在上传完成以后,将 COS 返回的文件MD5与本地文件算出来的md5进行校验。默认开启如果校验出错
文件仍然会被上传到 COS, 不过我们会在本地抛出校验失败的error。
*/
@property (nonatomic, assign) BOOL enableVerification;
/**
在进行HTTP请求的时候可以通过设置该参数来设置自定义的一些头部信息。
通常情况下携带特定的额外HTTP头部可以使用某项功能如果是这类需求可以通过设置该属性来实现。
*/
@property (strong, nonatomic) NSMutableDictionary *_Nullable customHeaders;
@property (strong, nonatomic) NSString *_Nullable regionName;
@property (assign, nonatomic) bool uploadBodyIsCompleted;
/**
上传完成后会通过该block回调。若error为空可视为成功。
@param QCloudRequestFinishBlock 上传完成后的回调
*/
- (void)setFinishBlock:(void (^_Nullable)(QCloudUploadObjectResult *_Nullable result, NSError *_Nullable error))QCloudRequestFinishBlock;
#pragma resume
/**
在初始化分片上传完成以后会回调的block中获取 resumeData,通过 resumeData 生成一个分片上传的请求;
*/
+ (instancetype)requestWithRequestData:(QCloudCOSXMLUploadObjectResumeData _Nullable)resumeData;
/**
主动调用取消,并且产生 resumetData
*/
- (QCloudCOSXMLUploadObjectResumeData)cancelByProductingResumeData:(NSError *__autoreleasing *)error;
- (void)abort:(QCloudRequestFinishBlock _Nullable)finishBlock;
- (void)setCOSServerSideEncyption;
- (void)setCOSServerSideEncyptionWithCustomerKey:(NSString *_Nonnull)customerKey;
- (void)setCOSServerSideEncyptionWithKMSCustomKey:(NSString *_Nonnull)customerKey jsonStr:(NSString *_Nonnull)jsonStr;
@end
NS_ASSUME_NONNULL_END