2015-02-23 155 views
1

嗨,我嘗試上傳一個文件到我的存儲桶在AWS s3沒有成功。從ios上傳數據庫文件到AWS s3問題

我只需要從某些手機上的應用程序上傳文件。

我使用iOS上的8

AWS SDK版本2,這是我的上傳功能的DB:

UPLOAD

NSString *fileName = DB_File; 
     NSString *directoryPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

    NSString *filePath = [directoryPath stringByAppendingPathComponent:fileName]; 
    NSData *fileData = [NSData dataWithContentsOfFile:filePath]; 





    AWSS3TransferManager *transferManager = [AWSS3TransferManager defaultS3TransferManager]; 
    AWSS3TransferManagerUploadRequest *uploadRequest = [AWSS3TransferManagerUploadRequest new]; 
    uploadRequest.body = [NSURL fileURLWithPath:filePath]; 
    uploadRequest.key = fileName; 
    uploadRequest.bucket = @"xxxx"; 

    [[transferManager upload:uploadRequest] continueWithBlock:^id(BFTask *task) { 
     if (task.error) { 
      if ([task.error.domain isEqualToString:AWSS3TransferManagerErrorDomain]) { 
       switch (task.error.code) { 
        case AWSS3TransferManagerErrorCancelled: 
        case AWSS3TransferManagerErrorPaused: 
        { 
        NSLog(@"Upload failed: [%@]", task.error); 
        } 
         break; 

        default: 
         NSLog(@"Upload failed: [%@]", task.error); 
         break; 
       } 
      } else { 
       NSLog(@"Upload failed: [%@]", task.error); 
      } 
     } 

     if (task.result) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       NSLog(@"Upload ok: [%@]", task.error); 
      }); 
     } 
     return nil; 
    }]; 

AppDelege.m

* *

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]){ 
     [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]]; 
    } 
    AWSCognitoCredentialsProvider *credentialsProvider = [AWSCognitoCredentialsProvider 
                  credentialsWithRegionType:AWSRegionxxxx 
                  identityPoolId:@"us-xxxx-1:xxxxxx-xxxx-xxxx-xxxxx-xxxxxxx"]; 

    AWSServiceConfiguration *configuration = [AWSServiceConfiguration configurationWithRegion:AWSRegionUSEast1 
                      credentialsProvider:credentialsProvider]; 

    [AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration; 


    return YES; 
} 

**

感謝

+0

您是否更新了存儲桶策略? – RJiryes 2015-02-23 10:18:11

+0

不, 我與亞馬遜新,有什麼需要添加? – user3428151 2015-02-23 10:22:19

回答

0

試着改變你的水桶政策,這(更換bucketName):

{ 
"Version": "2008-10-17", 
"Id": "policy", 
"Statement": [ 
    { 
     "Sid": "allow-public-read", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "*" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::bucketName/*" 
    }, 
    { 
     "Sid": "allow-public-put", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "*" 
     }, 
     "Action": "s3:PutObject", 
     "Resource": "arn:aws:s3:::bucketName/*" 
    } 
] 
} 

這可以讓你從你的水桶添加/讀取對象,你應該閱讀AWS S3 Documentation爲了知道你想要什麼你的政策,但現在,這應該做的伎倆。

+0

還是不上傳,也許別的東西? – user3428151 2015-02-23 10:34:41

+0

嘗試打印錯誤 – RJiryes 2015-02-23 10:36:49

+0

沒有錯誤。 uploadRequest.key =「文件名」可以嗎? 我剛剛打開一個沒有任何內部文件夾的存儲桶。沒關係? – user3428151 2015-02-23 10:45:25

0

我放棄使用AWS SDK。我用AFAmazonS3Manager嘗試過,效果很好。

AFAmazonS3Manager:亞馬遜S3 API的AFNetworking客戶端。