質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.13%

S3サーバーへのアップロードについて

受付中

回答 1

投稿

  • 評価
  • クリップ 2
  • VIEW 1,814

score 12

Amzon Web ServicesのS3サーバーへの動画アップロードに失敗してしまいます。お分かりになる方おたすけください。
ちなみに、余分な箇所は削除されています。

AppDelegate.m
#import <AWSCore/AWSCore.h>
@interface AppDelegate() {
    
    @end
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:"プールID"];
        
        AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider];
        
        [AWSServiceManager defaultServiceManager].defaultServiceConfiguration = configuration;
        
        [[credentialsProvider getIdentityId] continueWithSuccessBlock:^id(AWSTask *task){
            
            return nil;
        }];
        
        return YES;
        
        
    }
    
    動画投稿用クラス
    
#import <AWSCore/AWSCore.h>
#import <AWSS3/AWSS3.h>
#import <AWSDynamoDB/AWSDynamoDB.h>
#import <AWSSQS/AWSSQS.h>
#import <AWSSNS/AWSSNS.h>
#import <AWSCognito/AWSCognito.h>

@interface

@end

    -(void)execSubmit
    {
        {
            NSLog(@"%s",__func__) ;
            
            // 現在時間を取得する
            NSDate *now = [NSDate date];
            NSLog(@"%@", now);
            
            AWSS3TransferManagerUploadRequest *uploadRequest = [AWSS3TransferManagerUploadRequest new];
            uploadRequest.bucket = @"バケット名";
            uploadRequest.key = @"ファイル名";
            uploadRequest.body = staticRecordSession.outputUrl;
            
            [[transferManager upload:uploadRequest] continueWithExecutor:[AWSExecutor mainThreadExecutor]
                                                               withBlock:^id(AWSTask *task) {
                                                                   
                                                                   NSLog(@"task upload:%@",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;
                                                               }];
            
            
            
            
            
        };
    }

結果

2015-08-04 17:28:56.364 [235:13900] task upload:<AWSTask: 0x17627c100; completed = YES; cancelled = NO; faulted = YES; result:(null)>
2015-08-04 17:28:56.365 [235:13900] Error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0x1702e4e00 {NSUnderlyingError=0x170443900 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1001.)", NSErrorFailingURLStringKey=URL, NSErrorFailingURLKey=URL, NSLocalizedDescription=The request timed out.}

となってしまいます。
長時間はまっているのでどなたか助けていただけるとすごく助かります。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+1

S3側のバケットのポリシーだったり、SDKが使ってるユーザーに権限(例えばputObject)が足りてないとかはありませんか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/06 17:08

    回答いただきありがとうございます。putObjectというメソッド、AWS for mobileの公式ドキュメントにはないのですが、もし参考になるサイト等あればご教授いただけますか?

    キャンセル

  • 2015/08/06 17:24

    コメントへの返信ですのでこちらに

    https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/example-policies-s3.html

    要は、S3の扱う際にユーザーを設定したと思うのですが(AccessKeyとSercretKey)
    そのユーザーには、バケット単位でどのような処理を許可するかというルール付けが出来るので、その権限は足りているか確認してみるとよいかと

    キャンセル

  • 2015/08/07 11:56

    ShintaroIshidaさんありがとうございます!
    プログラムは正しく動いてそうなので接続先のAWSの設定(特に権限周り)をご確認ください:-)

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る