アップロード

Object Body としてファイルをアップロードすると、Object とファイルを紐付けて管理できます。

JavaScript SDK からは、各 Object Body は 100 MB までのアップロードが可能です(サーバーの安定動作のため、1 回のアップロードリクエストは 1 分程度までを目安としてください)。Object Body のアップロードには XMLHttpRequest Level 2, FileReader および Blob のサポートが必要です。

JavaScript SDK の v2 系では、progress コールバックによるアップロード進捗状況の確認ができます。
(SDK v3 系ではコールバック自体が未サポートのため、この機能は利用できません)

Server Code では Object Body のアップロードが利用できません。

Object の Object Body をアップロードする例を以下に挙げます。

  • // Create a KiiObject in an application-scope bucket.
    var object = Kii.bucketWithName("AppBucket").createObject();
    
    // Save the KiiObject.
    object.save().then(
      function(theObject) {
        // Define a Blob object. You can get a Blob object from an input to an HTML form.
        var srcData = new Blob(["Hello Blob"], {type: "text/plain"});
    
        // Start uploading.
        return theObject.uploadBody(srcData).then(
          function(theObject) {
          // Upload succeeded.
         }
        ).catch(
          function(error) {
            var theObject = error.target;
            var errorString = error.message;
            // Handle the error.
          }
        )
      }
    );
  • // Create a KiiObject in an application-scope bucket.
    var object = Kii.bucketWithName("AppBucket").createObject();
    
    // Save the KiiObject.
    object.save().then(
      function(theObject) {
        // Define a Blob object. You can get a Blob object from an input to an HTML form.
        var srcData = new Blob(["Hello Blob"], {type: "text/plain"});
    
        // Start uploading.
        return theObject.uploadBody(srcData, {
          progress: function (oEvent) {
            if (oEvent.lengthComputable) {
              // Get the upload progress. You can update the progress bar with this function.
              var percentComplete = oEvent.loaded / oEvent.total * 100;
              console.log("upload percentComplete: " + percentComplete);
            }
          }
        });
      }
    ).then(
      function(theObject) {
        // Upload succeeded.
      }
    ).catch(
      function(error) {
        var theObject = error.target;
        var errorString = error.message;
        // Handle the error.
      }
    );
  • // Create a KiiObject in an application-scope bucket.
    var object = Kii.bucketWithName("AppBucket").createObject();
    
    // Save the KiiObject.
    object.save({
      success: function(theObject) {
        // Define a Blob object. You can get a Blob object from an input to an HTML form.
        var srcData = new Blob(["Hello Blob"], {type: "text/plain"});
    
        // Start uploading.
        theObject.uploadBody(srcData, {
          progress: function (oEvent) {
            if (oEvent.lengthComputable) {
              // Get the upload progress. You can update the progress bar with this function.
              var percentComplete = oEvent.loaded / oEvent.total * 100;
              console.log("upload percentComplete: " + percentComplete);
            }
          },
          success: function(theObject) {
            // Upload succeeded.
          },
          failure: function(theObject, errorString) {
            // Handle the error.
          }
        });
      },
      failure: function(theObject, errorString) {
        // Handle the error.
      }
    });

ここでは以下の処理を実施しています。

  • (必要に応じて)KiiObject にキーと値のペアをセットします。ファイル名、ファイルサイズ、Object Body の有無などを登録しておくことができます。
  • save() メソッドを実行して、オブジェクトを保存します。
  • アップロード対象ファイルの Blob を作成します。
  • uploadBody() メソッドを実行して、ファイルのアップロードを開始します。
  • (SDK v2 系のみ)progress コールバックが転送の進捗状況に応じて呼び出されます。転送サイズが小さい場合は、1 回目の呼び出しで 100% の進捗を示すことがあります。

uplaodBody() メソッドを使用する場合は、事前に save() メソッドによって Kii Cloud 上に KiiObject を作成しておく必要があります。

Content-Type は "type/subtype" の形式で指定します。Kii Cloud に送信された Content-Type は、ダウンロード時や、公開された Object Body をブラウザで参照するときに使用されます。