将图像上传到s3存储桶,然后上传图像'在后台链接到我的服务器

时间:2014-12-02 14:54:27

标签: ios amazon-s3 nsurlsession nsurlsessionuploadtask pre-signed-url

我有一个通用的问题,经验丰富的开发人员在阅读时可能会嘲笑我,但我无法以某种方式管理它。

基本上,我想将文件系统中的图像上传到我的amazon s3存储桶,然后将这些图像的链接上传到我的服务器。在我将图像上传到s3之后,我获得了它们的链接并将它们存储在一个数组中。然后我想将这些链接上传到我的服务器。但是,为了覆盖上传应用程序暂停,我想让这个过程在后台运行。架构如下。

将图片上传到s3 - >获取这些图片的s3链接 - >上传到服务器的链接

我正在尝试使用Amazon SDK的presignedURL实用程序,因为亚马逊建议将其用于后台上传。

iOS API文档说NSURLSessionUploadTask执行我正在尝试的操作。首先,我无法使用presignedURL将图像上传到s3(我设法使用TransferManagerUploadRequest上传)。其次,即使应用程序暂停,此过程也应该运行。但我实际上不知道该怎么做。我把我的“upload-to-s3”代码放在下面现在不能正常工作。

很抱歉这个复杂的问题,它现在确实显示了我的想法。

 NSString *fileContentTypeStr = @"image/png";
AWSS3GetPreSignedURLRequest *urlRequest = [AWSS3GetPreSignedURLRequest new];
urlRequest.bucket = @"bounty-app";
urlRequest.key =[NSString stringWithFormat:@"submissions/photos/%@",nameOfImage];
urlRequest.HTTPMethod = AWSHTTPMethodPUT;
urlRequest.expires = [NSDate dateWithTimeIntervalSinceNow:3600];
urlRequest.contentType = fileContentTypeStr;
[[[AWSS3PreSignedURLBuilder defaultS3PreSignedURLBuilder] getPreSignedURL:urlRequest]
 continueWithBlock:^id(BFTask *task) {

     if (task.error) {
         NSLog(@"Error: %@",task.error);
     } else {
         NSURL *presignedURL = task.result;
         NSLog(@"upload presignedURL is: \n%@", presignedURL);

         NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:presignedURL];
         request.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
         [request setHTTPMethod:@"PUT"];
         [request setValue:fileContentTypeStr forHTTPHeaderField:@"Content-Type"];

         NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"unique_name_of_tttask"];
         NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
         NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromFile:savedPath];

         [uploadTask resume];
     }         
     return nil;
 }];

0 个答案:

没有答案