1

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

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

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

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

iOS API 文档说 NSURLSessionUploadTask 做了我想做的事情。首先,我无法使用 presignedURL 将图像上传到 s3(我设法使用 TransferManagerUploadRequest 上传)。其次,即使应用程序被挂起,这个进程也应该运行。但实际上我不知道该怎么做。我把我的“上传到 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;
 }];
4

0 回答 0