4

私のサーバーは、S3 への署名付きアップロードの情報を生成しています。その情報を iOS に渡すと、小さなファイルで機能します。より大きなものでも機能する場合がありますが、タイムアウトすることがよくあります。現在、WIFI経由でiOS 7でテストしています。約 35 MB のファイルで約 60% 後にタイムアウトするのが一般的ですが、完了する場合もあれば、それより早くタイムアウトする場合もあります。

私のサーバーは次の情報を生成し、フォーム パーツとして POST に渡します。(同様の結果が得られるパラメーターとしても試しました):

  • AWSAccessKeyId
  • コンテンツ タイプ
  • acl (プライベートに設定)
  • バケツ
  • ポリシー
  • サイン
  • success_action_redirect

URLも同様です。

アップロードを生成するコードは次のとおりです。

AFHTTPRequestOperation *op = [manager POST:url
                                parameters:nil
                 constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
          {
              if( throttle )
                  [formData throttleBandwidthWithPacketSize:kAFUploadStream3GSuggestedPacketSize delay:kAFUploadStream3GSuggestedDelay];
              for( id key in parameters ) {
                  NSString *val = parameters[key];                      
                  [formData appendPartWithFormData:[val dataUsingEncoding:NSUTF8StringEncoding] name:key];
              }
              NSError *error;
              if( ![formData appendPartWithFileURL:videoUrl name:@"file" fileName:@"movie.mov" mimeType:@"video/quicktime" error:&error] ) {
                  // handle the error
              }

          } success:^(AFHTTPRequestOperation *operation, id responseObject) {
              //success
          }
               failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                   if( error.code == -1021 && !throttle ) {
                       //try again with throttle:

                   }
                   NSLog(@"Error: %@", error);
                   // handle error
               }];

これにより、次のエラーが生成されます。

Error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0x1aa15130 {NSErrorFailingURLStringKey=XXX, NSErrorFailingURLKey=XXX, NSLocalizedDescription=The request timed out., NSUnderlyingError=0x1ab94290 "The request timed out."}

アップデート:

SOにはいくつかの同様の質問があります。多くの人が Heroku のタイムアウトに問題を抱えていますが、私は S3 に直接アップロードしています。

この人物は、自分のサーバーへのアップロードで同じ問題を抱えているようです: - AFNetworking を使用して iOS に大きなファイルをアップロードする - エラー Request Timeout

この質問は、AWS ライブラリを使用した同様の問題のように見えますが、コードは提供されていません。

AFNetworking による Amazon-S3 へのアップロード

この問題は関連しているようですが、ソースを見ると、ファイルを投稿するときに長さが考慮されているようです:

https://github.com/AFNetworking/AFNetworking/issues/1510#issuecomment-29687300

4

2 に答える 2