开发者社区 问答 正文

iOS-SDK之如何实现分片上传(二)?


完成分片上传(设置ServerCallback)


完成分片上传请求可以设置Server Callback参数,请求完成后会向指定的Server Adress发送回调请求;可通过查看返回结果的result.serverReturnJsonString,查看servercallback结果。

  1. OSSCompleteMultipartUploadRequest * complete = [OSSCompleteMultipartUploadRequest new];
  2. complete.bucketName = @"<bucketName>";
  3. complete.objectKey = @"<objectKey>";
  4. complete.uploadId = uploadId;
  5. complete.partInfos = partInfos;
  6. complete.callbackParam = @{
  7.                           @"callbackUrl": @"<server address>",
  8.                           @"callbackBody": @"<test>"
  9.                           };
  10. complete.callbackVar = @{
  11.                         @"var1": @"value1",
  12.                         @"var2": @"value2"
  13.                         };
  14. OSSTask * completeTask = [client completeMultipartUpload:complete];
  15. [[completeTask continueWithBlock:^id(OSSTask *task) {
  16.     if (!task.error) {
  17.         OSSCompleteMultipartUploadResult * result = task.result;
  18.         NSLog(@"server call back return : %@", result.serverReturnJsonString);
  19.     } else {
  20.         // ...
  21.     }
  22.     return nil;
  23. }] waitUntilFinished];


删除分片上传事件


下面代码取消了对应UploadId的分片上传请求。
  1. OSSAbortMultipartUploadRequest * abort = [OSSAbortMultipartUploadRequest new];
  2. abort.bucketName = @"<bucketName>";
  3. abort.objectKey = @"<objectKey>";
  4. abort.uploadId = uploadId;
  5. OSSTask * abortTask = [client abortMultipartUpload:abort];
  6. [abortTask waitUntilFinished];
  7. if (!abortTask.error) {
  8.     OSSAbortMultipartUploadResult * result = abortTask.result;
  9.     uploadId = result.uploadId;
  10. } else {
  11.     NSLog(@"multipart upload failed, error: %@", abortTask.error);
  12.     return;
  13. }


罗列分片


调用listParts方法获取某个上传事件所有已上传的分片。
  1. OSSListPartsRequest * listParts = [OSSListPartsRequest new];
  2. listParts.bucketName = @"<bucketName>";
  3. listParts.objectKey = @"<objectkey>";
  4. listParts.uploadId = @"<uploadid>";
  5. OSSTask * listPartTask = [client listParts:listParts];
  6. [listPartTask continueWithBlock:^id(OSSTask *task) {
  7.     if (!task.error) {
  8.         NSLog(@"list part result success!");
  9.         OSSListPartsResult * listPartResult = task.result;
  10.         for (NSDictionary * partInfo in listPartResult.parts) {
  11.             NSLog(@"each part: %@", partInfo);
  12.         }
  13.     } else {
  14.         NSLog(@"list part result error: %@", task.error);
  15.     }
  16.     return nil;
  17. }];

注:默认情况下,如果存储空间中的分片上传事件的数量大于1000,则只会返回1000个Multipart Upload信息,且返回结果中 IsTruncated 为false,并返回 NextPartNumberMarker作为下此读取的起点。

展开
收起
青衫无名 2017-10-18 14:40:04 1606 分享 版权
阿里云 AI 助理回答

您提到的这些操作都是在使用阿里云对象存储服务(OSS)时,与分片上传相关的高级功能。下面我将对您给出的代码示例和描述进行解析,并提供一些额外的说明:

完成分片上传并设置Server Callback

当您需要上传大文件时,可以使用分片上传的方式,最后通过completeMultipartUpload方法完成上传。在您的代码示例中,展示了如何设置Server Callback,即在上传完成后,OSS会向指定的URL发送一个回调通知,携带上传结果信息。这在自动化处理、通知系统或记录日志等场景非常有用。

  • callbackParam:用于设置回调地址(callbackUrl)和回调内容格式(callbackBody)。
  • callbackVar:允许您自定义一些变量,这些变量的值会被嵌入到callbackBody中。

删除分片上传事件

如果不再需要某个已开始的分片上传,可以通过abortMultipartUpload方法取消它,以避免不必要的存储费用和清理资源。此操作会删除所有已上传的分片数据。

罗列分片

listParts方法可以帮助您获取特定上传ID下的所有已上传分片信息,这对于检查上传进度或故障排查非常有帮助。需要注意的是,如果分片上传事件数量过多,OSS默认只会返回前1000条记录,此时需要根据返回的NextPartNumberMarker来分页查询剩余的记录。

额外提示

  • 监控上传状态:除了回调机制,您还可以利用OSS的日志管理功能或结合阿里云的其他服务(如日志服务SLS)来监控上传任务的状态和性能。
  • 优化上传策略:对于频繁的大文件上传,考虑使用预签名URL或者STS临时凭证来提升安全性与灵活性。
  • 注意成本:虽然分片上传提供了大文件上传的解决方案,但频繁的分片操作和未完成的上传可能会增加存储成本,确保及时清理无用的分片上传事件。

希望这些解释能帮助您更好地理解和使用阿里云OSS的分片上传功能及其相关特性。如果您有更具体的问题或需要进一步的帮助,请随时告知。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答