AWSS3TransferManager NSCocoaErrorDomain 代码=2 错误

Posted

技术标签:

【中文标题】AWSS3TransferManager NSCocoaErrorDomain 代码=2 错误【英文标题】:AWSS3TransferManager NSCocoaErrorDomain Code=2 Error 【发布时间】:2015-01-20 08:58:10 【问题描述】:

我的代码出现以下奇怪错误。 NSFilemanager 中的文件路径有限制吗?真正奇怪的是,通过 AWS S3 上传时,这条路径可以正常工作

AWSURLSessionManager URLSession:dataTask:didReceiveResponse:completionHandler:] |错误:无法使用文件路径创建文件:/profilePicture12.jpeg

    AWSStaticCredentialsProvider *credentialsProvider = [AWSStaticCredentialsProvider credentialsWithAccessKey:AWS_Access_Key secretKey:AWS_Secret_Key];
AWSServiceConfiguration *configuration = [AWSServiceConfiguration configurationWithRegion:AWSRegionUSWest1 credentialsProvider:credentialsProvider];
[AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration;
self.downloadRequest = [AWSS3TransferManagerDownloadRequest new];

//bucket and image name
self.downloadRequest.bucket = AWS_Bucket_Name;
self.downloadRequest.key = S3_Link;


//unique customer path to store download
NSString* uniqueCustomerPath = [NSString stringWithFormat:@"profilePicture%ld.jpeg", (long)self.current_customer.id];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString  *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:uniqueCustomerPath];
self.downloadRequest.downloadingFileURL = [NSURL fileURLWithPath:uniqueCustomerPath];

AWSS3TransferManager *transferManager = [AWSS3TransferManager defaultS3TransferManager];
[[transferManager download:self.downloadRequest] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task)
    if (task.error != nil) 
        NSLog(@"Error: [%@]", task.error);

    else 
      ///do stuff
    
    return nil;
];

【问题讨论】:

【参考方案1】:

以下代码对我有用。我怀疑您正在尝试将文件写入不可写路径。另一个猜测是 S3_Link 设置为键。如果它是完整的 S3 路径,它可能不起作用。试试那里的文件名。

NSURL *bucketFileURL = [NSURL URLWithString:url];
NSString *key = [bucketFileURL lastPathComponent];
NSString *downloadingFilePath = [DOCUMENTS_DIRECTORY stringByAppendingPathComponent:key];

NSURL *downloadingFileURL = [NSURL fileURLWithPath:downloadingFilePath];

AWSS3TransferManagerDownloadRequest *downloadRequest = [AWSS3TransferManagerDownloadRequest new];
downloadRequest.bucket = @"my-bucket-name";
downloadRequest.key = key;
downloadRequest.downloadingFileURL = downloadingFileURL;

AWSS3TransferManager *transferManager = [AWSS3TransferManager defaultS3TransferManager];
[[transferManager download:downloadRequest] continueWithBlock:^id(BFTask *task) 

     if (task.result) 
         UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:downloadRequest.downloadingFileURL]];
         callback(img);
      else if (task.error) 
         NSLog(@"Download Error: %@", task.error);
     

     return nil;
 ];

【讨论】:

以上是关于AWSS3TransferManager NSCocoaErrorDomain 代码=2 错误的主要内容,如果未能解决你的问题,请参考以下文章

将图像上传到 Amazon S3 时出现 NotAuthorizedException

使用参数初始化 UIView

SWIFT - NSCocoaErrorDomain,无法从 documentPicker 打开文档

使用 Core Graphics 使用 AppleScriptObjC 更改图像色彩空间配置文件

iOS 对模型对象进行归档

如何在 Swift 中归档和取消归档自定义对象?或者如何在 Swift 中将自定义对象保存到 NSUserDefaults?