このトピックでは、iOS用アップロードSDKを使用してファイルをアップロードする方法について説明します。

手順

  1. アップロードURLとアップロード資格情報またはSecurity Token Service (STS) トークンをリクエストします。
    VODUploadClientファイルアップロードオブジェクトを使用すると、アップロードURLと資格情報またはSTSトークンを使用して、ApsaraVideo VODにファイルをアップロードできます。 アップロードURLと資格情報を使用することを推奨します。
    • Request an upload URL and an upload credential

      画像とビデオのアップロードURLと資格情報を取得するには、さまざまなAPI操作を呼び出す必要があります。

      • ビデオのアップロード: クライアントはアップロード要求をAppServerに送信します。 AppServerは、CreateUploadVideo操作を呼び出して、ApsaraVideo VODにリクエストを送信し、アップロードURLとアップロード資格情報を取得します。 If the request succeeds, the AppServer receives the upload URL, upload credential, and the VideoId parameter, and returns them to the client.
      • 画像のアップロード: クライアントはアップロード要求をAppServerに送信します。 AppServerは、CreateUploadImage操作を呼び出して、ApsaraVideo VODにリクエストを送信し、アップロードURLとアップロード資格情報を取得します。 リクエストが成功すると、AppServerはアップロードURL、アップロード資格情報、およびImageURLパラメーターを受け取り、それらをクライアントに返します。
    • STSトークンのリクエスト

      クライアントはアップロード要求をAppServerに送信します。 AppServerは、一時的なSTSトークンを取得するためにSTSに要求を送信します。 リクエストが成功すると、AppServerはSTSトークンを受け取り、クライアントに返します。

  2. アップロードインスタンスを初期化します。
    1. Declare a VODUploadClient object, which cannot be a local variable.
      @ プロパティ (非原子、強力) VODUploadClient * uploader;
    2. 次のいずれかの方法を使用して、アップロードインスタンスを初期化します。
      • Use the upload URL and credential

        If you use the upload URL and credential, call the init method to initialize the upload instance.

        You do not need to specify the obtained upload URL and credential during initialization. 代わりに、アップロードの開始時に起動されるOnUploadStartedListenerコールバックでsetUploadAuthAndAddress: uploadAuth:uploadAddress: メソッドを呼び出してSDKで指定します。

        When the upload credential expires, the OnUploadTokenExpiredListener callback is fired. 新しいアップロード資格情報を使用してアップロードを再開するには、resumeWithAuthメソッドを呼び出します。

        //create VODUploadClient object
        self.uploader = [VODUploadClient new];
        //weakself
        __weak typeof(self) weakSelf = self;
        //setup callback
        OnUploadFinishedListener FinishCallbackFunc = ^(UploadFileInfo* fileInfo, VodUploadResult* result){
            NSLog(@ "upload finished callback videoid :%@, imageurl :%@", result.videoId, result.imageUrl);
        };
        OnUploadFailedListener FailedCallbackFunc = ^(UploadFileInfo * fileInfo, NSString * code, NSString * message){
            NSLog(@"upload failed callback code = %@, error message = %@", code, message);
        };
        OnUploadProgressListener ProgressCallbackFunc = ^(UploadFileInfo* fileInfo, long uploadedSize, long totalSize) {
            NSLog(@ "アップロードプログレスコールバックuploadedSize : % li、totalSize : % li" 、uploadedSize、totalSize);
        };
        OnUploadTokenExpiredListener TokenExpiredCallbackFunc = ^ {
            NSLog(@ "アップロードトークン期限切れコールバック。");
            // 新しいアップロード資格情報を指定して、資格情報の有効期限が切れるとアップロードを再開します。
            [weakSelf.uploader resumeWithAuth:'new upload auth'];
        };
        OnUploadRertyListener RetryCallbackFunc = ^ {
            NSLog(@ "アップロード再試行コールバック開始");
        };
        OnUploadRertyResumeListener RetryResumeCallbackFunc = ^ {
            NSLog(@"upload retry end callback.");
        };
        OnUploadStartedListener UploadStartedCallbackFunc = ^(UploadFileInfo* fileInfo) {
            NSLog(@"upload upload started callback.");
            // アップロードURLと資格情報を指定します。
            [weakSelf.uploader setUploadAuthAndAddress:fileInfo uploadAuth:`upload auth` uploadAddress:`upload address`];
        };
        VODUploadListener *listener = [[VODUploadListener alloc] init];
        listener.finish = FinishCallbackFunc;
        listener.failure = FailedCallbackFunc;
        listener.progress = ProgressCallbackFunc;
        listener.expire = TokenExpiredCallbackFunc;
        listener.retry = RetryCallbackFunc;
        listener.retryResume = RetryResumeCallbackFunc;
        listener.started = UploadStartedCallbackFunc;
        //init with upload address and upload auth
        [self.uploader init:listener];
      • Use the STS token

        STSトークンを使用してApsaraVideo VODにファイルをアップロードする場合は、init: accessKeySecret: secretToken: expireTime: listenerメソッドを呼び出してアップロードインスタンスを初期化します。 取得した一時STSトークンを初期化パラメーターとして使用します。

        STSトークンの有効期限が切れると、OnUploadTokenExpiredListenerコールバックが発生します。 新しいSTSトークンを使用してアップロードを再開するには、resumeWithToken: accessKeySecret: secretToken: expireTimeメソッドを呼び出します。

        // VODUploadClientオブジェクトを作成する
        self.uploader = [VODUploadClient new];
        // weakself
        __weak typeof(self) weakSelf = self;
        // setup callback
        OnUploadFinishedListener FinishCallbackFunc = ^(UploadFileInfo * fileInfo, VodUploadResult * result){
            NSLog(@ "upload finished callback videoid :%@, imageurl :%@", result.videoId, result.imageUrl);
        };
        OnUploadFailedListener FailedCallbackFunc = ^(UploadFileInfo * fileInfo, NSString * code, NSString * message){
            NSLog(@ "アップロード失敗したコールバックコード=%@, エラーメッセージ=% @", code, message);
        };
        OnUploadProgressListener ProgressCallbackFunc = ^(UploadFileInfo * fileInfo, long uploadedSize, long totalSize) {
            NSLog(@ "アップロードプログレスコールバックuploadedSize : % li、totalSize : % li" 、uploadedSize、totalSize);
        };
        OnUploadTokenExpiredListener TokenExpiredCallbackFunc = ^ {
            NSLog(@"upload token expired callback.");
            // Specify a new STS token to resume the upload upon credential expiration.
            [weakSelf.uploader resumeWithToken:'STS Key Id 'accessKeySecret:'STS Key Secret' Secret' Token:'STS Secret Token 'expireTime:'STS Expire Time'];
        };
        OnUploadRertyListener RetryCallbackFunc = ^ {
            NSLog(@ "アップロード再試行コールバック開始");
        };
        OnUploadRertyResumeListener RetryResumeCallbackFunc = ^ {
            NSLog(@ 「アップロード再試行終了コールバック」);
        };
        OnUploadStartedListener UploadStartedCallbackFunc = ^(UploadFileInfo * fileInfo) {
            NSLog(@ "アップロードアップロードコール開始");
        };
        // init
        VODUploadListener * listener = [[VODUploadListener alloc] init];
        listener.finish = FinishCallbackFunc;
        listener.failure = FailedCallbackFunc;
        listener.progress = ProgressCallbackFunc;
        listener.expire = TokenExpiredCallbackFunc;
        listener.retry = RetryCallbackFunc;
        listener.retryResume = RetryResumeCallbackFunc;
        listener.started = UploadStartedCallbackFunc;
        // STSを使用したinit
        [self.uploader init:'STS Key Id 'accessKeySecret:'STS Key Secret' Secret' トークン: STS Secret Token' expireTime:'STS Expire Time 'listener:listener];
  3. コールバックを設定します。

    アップロードステータスのコールバックのクラスに属するVODUploadListenerオブジェクトを設定します。 次のコールバックを設定する必要があります。

    /**
     This callback is fired when the upload succeeds.
     @ param fileInfoアップロードするファイルに関する情報。
     @ param resultアップロード結果。
     * /
    typedef void (^ OnUploadFinishedListener) (UploadFileInfo * fileInfo、VodUploadResult * 結果);
    /**
     このコールバックは、アップロードが失敗すると発生します。
     @ param fileInfoアップロードするファイルに関する情報。
     @ param codeエラーコード。
     @ paramメッセージエラーメッセージ。
     * /
    typedef void (^ OnUploadFailedListener) (UploadFileInfo * fileInfo、NSString * code、NSString * message);
    /**
     このコールバックは、デフォルトまたはカスタムアップロードの進行状況に達すると発生します。
     @param fileInfo The information about the file that you upload.
     @ param uploadedSizeアップロードされたパーツのサイズ。
     @ param totalSizeアップロードしたファイルの合計サイズ。
     * /
    typedef void (^ OnUploadProgressListener) (UploadFileInfo * fileInfo、long uploadedSize、long totalSize);
    /**
     This callback is fired when the upload credential or STS token expires.
     If you use the upload URL and credential to upload a file, call the resumeWithAuth: method to resume the upload.
     If you use an STS token to upload a file, call the resumeWithToken:accessKeySecret:secretToken:expireTime: method to resume the upload.
     * /
    typedef void (^ OnUploadTokenExpiredListener) ();
    /**
     このコールバックは、システムがアップロードを再試行すると発生します。
     * /
    typedef void (^ OnUploadRertyListener) ();
    /**
     このコールバックは、アップロードの再試行が完了した後にシステムがアップロードを再開すると発生します。
     */
    typedef void (^OnUploadRertyResumeListener) ();
    /**
     This callback is fired when the upload starts.
     アップロードURLと資格情報を使用してファイルをアップロードする場合は、setUploadAuthAndAddress:uploadAuth:uploadAddress: メソッドを呼び出して、アップロードURLと資格情報を指定します。
     @ param fileInfoアップロードするファイルに関する情報。
     * /
    typedef void (^ OnUploadStartedListener) (UploadFileInfo * fileInfo);
  4. アップロードリストにファイルを追加します。
    • ファイルの追加
      • ビデオを追加する
        NSString * filePath = [[NSBundle mainBundle] pathForResource:@ "test" ofType:@ "mp4"];
        VodInfo * vodInfo = [[VodInfo alloc] init];
        vodInfo.title = @ "title";
        vodInfo.de sc =@ "desc";
        vodInfo.ca teId = @(19);
        vodInfo.tags = @ "sports";
        [self.uploader addFile:filePath vodInfo:vodInfo];
      • 画像の追加
        NSString * filePath = [[NSBundle mainBundle] pathForResource:@ "test" ofType:@ "jpg"];
        VodInfo * imageInfo = [[VodInfo alloc] init];
        imageInfo.title = @ "title";
        imageInfo.de sc =@ "desc";
        imageInfo.ca teId = @(19);
        imageInfo.tags = @ "スポーツ";
        [self.uploader addFile:filePath vodInfo:imageInfo];
      アップロードするファイルのサイズは4 GBを超えることはできません。
      The VodInfo object has the following structure:
      // タイトル。
      @ property (非原子、コピー) NSString * title;
      // タグ。
      @ property (非アトミック、コピー) NSString * tags;
      // 説明。
      @ property (非アトミック, コピー) NSString * desc;
      // カテゴリID。
      @ プロパティ (非アトミック、強力) NSNumber * cateId;
      // サムネイルのURL。 値は、https:// で始まる完全なURLである必要があります。
      @ property (非原子、コピー) NSString * coverUrl;
      After you add a file to be uploaded, the SDK encapsulates the file in UploadFileInfo object that has the following structure:
      // ファイルのオンプレミスパス。
      @ property (非アトミック、コピー) NSString * filePath;
      // エンドポイント
      @ property (非アトミック、コピー) NSString * endpoint;
      // バケット
      @ property (非アトミック、コピー) NSString * bucket;
      // オブジェクト
      @ property (非アトミック、コピー) NSString * object;
      // VodInfo
      @ プロパティ (非アトミック、強力) VodInfo * vodInfo;
    • アップロードリストの管理

      The VODUploadClient allows you to add multiple files to upload them in sequence. You can use the following methods to manage the upload list:

      VODUploadClientオブジェクトを使用すると、複数のファイルをアップロードできます。 ただし、アップロードURLと資格情報を使用してメディアファイルをアップロードする場合は、各ファイルの構成を個別に設定する必要があります。 一度に複数のファイルをアップロードするためのコードは複雑です。 そのため、一度に1つのファイルをアップロードリストに追加することをお勧めします。
      • アップロードリストからファイルを削除します。 削除するファイルがアップロード中の場合、システムはアップロードをキャンセルし、リスト内の次のファイルのアップロードを自動的に開始します。
        - (BOOL)deleteFile:(int) index;
      • Clear the upload list. クリアするアップロードリストにアップロード中のファイルが含まれている場合、アップロードはキャンセルされます。
        - (BOOL)clearFiles;
      • アップロードリストを照会します。
        - (NSMutableArray<UploadFileInfo *> *)listFiles;
      • Mark a file in the upload list as canceled without removing it from the upload list. キャンセルするファイルがアップロード中の場合、システムはアップロードをキャンセルし、リスト内の次のファイルのアップロードを自動的に開始します。
        - (BOOL)cancelFile:(int)index;
      • キャンセルされたファイルを再開し、自動的にファイルのアップロードを開始します。
        - (BOOL)resumeFile :( int)index;
  5. Control the upload.
    • アップロードを開始します。
      [self.uploader開始];
      When this method is called, the OnUploadStartedListener callback is fired. If you use an upload URL and an upload credential to upload a file, specify the upload URL and credential in this callback, as shown in the following code:
      [weakSelf. uploadAuthAndAddress: fileInfo uploadAuth:weakSelf.uploadAuth uploadAddress:weakSelf.uploadAddress];
    • アップロードを停止します。 ファイルがアップロードされている場合、システムはアップロードをキャンセルします。
      - (BOOL) 停止;
      アップロードを停止した後にアップロードを再開する必要がある場合は、resumeFile: メソッドを呼び出して、アップロードするファイルを再開します。 または、アップロードリストをクリアし、ファイルを再度追加してアップロードします。
    • アップロードを一時停止します。
      - (BOOL) 一時停止;
    • アップロードを再開します。
      - (BOOL) 再開;
  6. コールバックを処理します。
    • Upload progress

      OnUploadProgressListenerコールバックは、パーツがアップロードされるたびに発生します。 コールバックパラメーターには、uploadedSizetotalSizeが含まれます。 uploadedSizeパラメーターはアップロードされたパーツのサイズを示し、totalSizeパラメーターはアップロードされたファイルの合計サイズを示します。

    • Upload success

      OnUploadFinishedListenerコールバックは、アップロードが成功すると発生します。 コールバックパラメーターには、アップロードしたファイルとアップロード結果に関する情報を示すUploadFileInfoVodUploadResultが含まれます。 VodUploadResultには次の属性が含まれます。

      @ property (非アトミック、コピー) NSString * videoId;
      @ property (非アトミック, コピー) NSString * imageUrl;
      The videoId or imageUr parameter is returned only when a video or an image is uploaded to ApsaraVideo VOD by using an STS token. アップロードURLとアップロード資格情報を使用してビデオまたは画像をアップロードする場合、videoIdまたはimageUrlパラメーターは返されません。 You can obtain the parameter value when you request an upload URL and an upload credential.

      After a video is uploaded, the videoId parameter is returned, which indicates the video ID. 次に、ビデオを再生するためのストリーミングURLを取得する必要があります。 詳細については、「ビデオを再生するための再生URLの取得」をご参照ください。

      イメージがアップロードされると、イメージURLを示すimageUrlパラメータが返されます。 URL署名が有効になっている場合、イメージURLは特定の期間後に期限切れになります。 詳細については、「URL認証の設定」をご参照ください。

    • アップロードの失敗

      アップロードが失敗すると、OnUploadFailedListenerコールバックが発生します。 codeおよびmessageコールバックパラメーターに基づいて、障害の原因を確認できます。 さらに、プロンプトがwebページに表示されます。 エラーコードの詳細については、「エラーコード」と「例外処理」をご参照ください。

    • 資格情報またはトークンの有効期限
      OnUploadTokenExpiredListenerコールバックは、アップロード資格情報またはSTSトークンの有効期限が切れると発生します。 AppServerにリクエストを送信して、新しいアップロード資格情報またはSTSトークンを取得し、次のメソッドを呼び出してアップロードを再開できます。
      • 新しいアップロード資格情報の指定
        - (BOOL)resumeWithAuth :( NSString *)uploadAuth;
      • 新しいSTSトークンの指定
        - (BOOL)resumeWithToken :( NSString *)accessKeyId
                accessKeySecret :( NSString *)accessKeySecret
                    secretToken :( NSString *)secretToken
                     expireTime:(NSString *)expireTime;
    • アップロードタイムアウト

      When the upload times out, the OnUploadRertyListener callback is fired and the system automatically retries to upload the file. webページでプロンプトを受け取るか、stopメソッドを呼び出してアップロードを停止できます。 In addition, you can set the maxRetryCount parameter to specify the maximum number of retries. 再試行の結果、アップロードを再開できることが示された場合、OnUploadRertyResumeListenerコールバックが起動され、アップロードが再開されます。

詳細設定

VODUploadClientオブジェクトは、次の詳細設定をサポートしています。

/**
 ApsaraVideo VODにアップロードした後にファイルをトランスコードするかどうかを指定します。 デフォルト値: YES。
 * /
@ プロパティ (非原子、割り当て) BOOLトランスコード;
/**
 Specify the maximum number of timeout retries allowed. デフォルト値: INT_MAX。
 * /
@ property (非アトミック、アサイン) uint32_t maxRetryCount;
/**
 タイムアウト期間を指定します。
 * /
@ property (非アトミック、アサイン) NSTimeInterval timeoutIntervalForRequest;
/**
 キャッシュデータが格纳されているディレクトリのパスを指定します。
 * /
@ property (非アトミック、コピー) NSString * recordDirectoryPath;
/**
 再開可能アップロードのアップロードの進行状況を記録するかどうかを指定します。 デフォルト値: YES。
 * /
@ property (非アトミック、割り当て) BOOL recordUploadProgress;
/**
 マルチパートアップロードの各パーツのサイズを指定します。 Default value: 1024 × 1024.
* /
@ プロパティ (非アトミック、割り当て) NSInteger uploadPartSize;
/**
 ApsaraVideo VODサービスのリージョンを指定します。 デフォルト値: "cn-shanghai" 。
 * /
@ property (非アトミック, コピー) NSString * region;