请问ios-oss-sdk临时取消上传该怎么做?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用阿里云对象存储(OSS)的iOS SDK时,如果需要临时取消上传任务,可以通过以下方法实现。具体操作分为两种场景:中断上传和取消分片上传。
中断上传是指在调用上传接口过程中停止当前任务。适用于所有类型的上传接口,包括普通上传和分片上传。
DisableRequest
方法来中断当前正在进行的上传任务。以下是中断上传的示例代码:
#include <alibabacloud/oss/OssClient.h>
#include <fstream>
using namespace AlibabaCloud::OSS;
int main(void)
{
// 初始化OSS账号信息
std::string Endpoint = "yourEndpoint";
std::string Region = "yourRegion";
std::string BucketName = "examplebucket";
std::string ObjectName = "exampledir/exampleobject.txt";
// 初始化网络等资源
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
std::vector<PutObjectOutcomeCallable> Callables;
for (int i = 0; i < 4; i++) {
std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>("yourLocalFilename", std::ios::in | std::ios::binary);
PutObjectRequest request(BucketName, ObjectName, content);
auto outcomeCallable = client.PutObjectCallable(request);
Callables.emplace_back(std::move(outcomeCallable));
}
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
// 中断上传
client.DisableRequest();
for (size_t i = 0; i < Callables.size(); i++) {
auto outcome = Callables[i].get();
if (outcome.error().Code() == "ClientError:100002" ||
outcome.error().Code() == "ClientError:200042") {
std::cout << "disable putobject success" << std::endl;
}
}
// 释放网络等资源
ShutdownSdk();
return 0;
}
取消分片上传是针对分片上传任务的操作,通过调用AbortMultipartUpload
接口通知OSS不再接受特定UploadId
的分片上传任务。
UploadId
。
UploadId
是在调用InitiateMultipartUpload
初始化分片上传后返回的结果。AbortMultipartUpload
接口取消分片上传任务。以下是取消分片上传的示例代码:
OSSAbortMultipartUploadRequest * abort = [OSSAbortMultipartUploadRequest new];
// 填写Bucket名称,例如examplebucket。
abort.bucketName = @"examplebucket";
// 填写文件完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
abort.objectKey = @"exampledir/exampleobject.txt";
// 填写uploadId。uploadId来源于调用InitiateMultipartUpload完成初始化分片之后的返回结果。
abort.uploadId = @"0004B999EF518A1FE585B0C9****";
OSSTask * abortTask = [client abortMultipartUpload:abort];
[abortTask waitUntilFinished];
if (!abortTask.error) {
OSSAbortMultipartUploadResult * result = abortTask.result;
NSLog(@"Cancel multipart upload success, UploadId: %@", result.uploadId);
} else {
NSLog(@"Cancel multipart upload failed, error: %@", abortTask.error);
return;
}
UploadId
相关的所有分片数据。deleteUploadIdOnCancelling
参数为NO
:
resumableUpload.deleteUploadIdOnCancelling = NO;
重要提示:如果不设置此参数,默认值为YES
,表示取消任务时会同步清理已上传到服务器的分片。
在断点续传场景下,取消上传任务时需要注意以下事项: 1. 默认情况下,取消任务会清理已上传到服务器的分片。 2. 如果希望保留断点记录以便后续续传,需指定断点记录的保存文件夹并设置deleteUploadIdOnCancelling
参数为NO
:
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
resumableUpload.recordDirectoryPath = cachesDir;
resumableUpload.deleteUploadIdOnCancelling = NO;
deleteUploadIdOnCancelling
参数保留断点记录。根据实际需求选择合适的取消方式,确保上传任务能够灵活管理。