首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >S3使用Amazon IOS Sdk循环上传多个图像,并获取公共url

S3使用Amazon IOS Sdk循环上传多个图像,并获取公共url
EN

Stack Overflow用户
提问于 2015-03-04 17:10:50
回答 1查看 1.3K关注 0票数 2

如何使用亚马逊IOS Sdk v2或v1在S3上上传多个图像文件。并返回到那里的公共url并保存到Nsarray。

检查下面我的代码,上传一张图片。但是,现在我想一次一个接一个地上传多张图片

有谁能帮助我吗?提前感谢

代码语言:javascript
复制
AWSS3TransferManager *transferManager = [AWSS3TransferManager defaultS3TransferManager];

AWSS3TransferManagerUploadRequest *uploadRequest = [AWSS3TransferManagerUploadRequest new];
uploadRequest.bucket = @"myBucket";
uploadRequest.key = @"imag.png";
uploadRequest.body = imagefileUrl;
uploadRequest.ACL=AWSS3BucketCannedACLPublicRead;

[[transferManager upload:uploadRequest] continueWithExecutor:[BFExecutor mainThreadExecutor]

  withBlock:^id(BFTask *task) {
  if (task.error) {
     if ([task.error.domain isEqualToString:AWSS3TransferManagerErrorDomain])
     {
         switch (task.error.code)
         {
                case AWSS3TransferManagerErrorCancelled:
                case AWSS3TransferManagerErrorPaused:
                break;

                default:
                        NSLog(@"Error: %@", task.error);
                        break;
          }
      } else {
               // Unknown error.
                      NSLog(@"Error: %@", task.error);
              }
  }
  if (task.result) {
      AWSS3TransferManagerUploadOutput *uploadOutput = task.result;
        // The file uploaded successfully.
   }
     return nil;
                 }];
EN

回答 1

Stack Overflow用户

发布于 2015-03-04 19:12:36

您可以使用如下所示的自调用方法来实现您想要的功能。

代码语言:javascript
复制
@property int counter;


_counter = 0;// set this from where you are calling this method.
-(void)uploadToS3FromUploadQueue{
   //upload
NSArray *paths = arrayContainglocalPathsOfYourFilesToUpload;
NSString * documentsPath = [paths objectAtIndex:0];
NSString *mediaDocumentDirectoryPath = [NSString stringWithFormat:@"%@/%@",documentsPath];
[self uploadTransferManagerBlockWithKey:observationModel.actualname andBody:[NSURL fileURLWithPath:mediaDocumentDirectoryPath] ofBaseModel:baseModel];
}
-(void)uploadTransferManagerBlockWithKey:(NSString *)key andBody:(NSURL
*)objectURL ofBaseModel:(BaseModel *)baseModel{
AWSS3TransferManagerUploadRequest *uploadRequest = [AWSS3TransferManagerUploadRequest new];
uploadRequest.bucket = S3BucketName;
uploadRequest.key = key;
uploadRequest.body = objectURL;
uploadRequest.ACL = AWSS3ObjectCannedACLPublicRead;
[[_transferManager upload:uploadRequest] continueWithExecutor:[BFExecutor mainThreadExecutor]
                                                    withBlock:^id(BFTask *task) {
                                                        if (task.error) {


                                                            if ([task.error.domain isEqualToString:AWSS3TransferManagerErrorDomain]) {
                                                                switch (task.error.code) {

                                                                    case AWSS3TransferManagerErrorCancelled:
                                                                        break;
                                                                    case AWSS3TransferManagerErrorPaused:
                                                                        break;

                                                                    default:
                                                                        NSLog(@"Error: %@", task.error);

                                                                        break;
                                                                }
                                                            } else {
                                                                // Unknown error.
                                                                NSLog(@"Error: %@", task.error);
                                                            }
                                                            // 

                                                            [uploadRequest cancel];
                                                            [_transferManager cancelAll];



                                                            counter = 0;



                                                                [self uploadToS3FromUploadQueue];
                                                            }



                                                        }

                                                        if (task.result) {
                                                            AWSS3TransferManagerUploadOutput *uploadOutput = task.result;
                                                             NSLog(@"Result Upload: %@", uploadOutput);
                                                            if (yourArrayContainingObject.count-1 == _counter) {
//Upload Completed
                                                            }
                                                            else{
                                                                _counter++;
                                                                [self uploadToS3FromUploadQueue];
                                                            }
                                                        }
                                                        return nil;
                                                    }];
}

我写这段代码很匆忙,但我会给你一个完美的想法。祝好运

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28850456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档