アップロード

中断/再開が可能な Object Body のアップロードをする例を以下に挙げます。

  • // Create a KiiObject in an application-scope bucket.
    KiiObject object = Kii.bucket("AppBucket").object();
    
    // Set key-value pairs.
    object.set("title", "MyVideo");
    object.set("fileSize", 10485760);
    
    // Specify a file to upload.
    File localFile = new File(Environment.getExternalStorageDirectory(),
            "sample.mp4");
    
    // Create an uploader.
    KiiUploader uploader = object.uploader(getApplicationContext(),
            localFile);
    
    try {
      // Start uploading.
      uploader.transfer(new KiiRTransferProgressCallback() {
        @Override
        public void onProgress(KiiRTransfer operator, long completedInBytes, long totalSizeinBytes) {
          float progress = (float)completedInBytes / (float)totalSizeinBytes * 100.0f;
        }
      });
    } catch (AlreadyStartedException e) {
      // The upload is already in progress.
    } catch (SuspendedException e) {
      // The upload has been suspended because of a network error or user interruption.
    } catch (TerminatedException e) {
      // The upload has been terminated because of the missing file or user interruption.
    } catch (StateStoreAccessException e) {
      // Failed to access the local storage.
    }
  • // Create a KiiObject in an application-scope bucket.
    KiiObject object = Kii.bucket("AppBucket").object();
    
    // Set key-value pairs.
    object.set("title", "MyVideo");
    object.set("fileSize", 10485760);
    
    // Specify a file to upload.
    File localFile = new File(Environment.getExternalStorageDirectory(),
            "sample.mp4");
    
    // Create an uploader.
    KiiUploader uploader = object.uploader(getApplicationContext(),
            localFile);
    
    // Start uploading.
    uploader.transferAsync(new KiiRTransferCallback() {
      @Override
      public void onStart(KiiRTransfer operator) {
      }
    
      @Override
      public void onProgress(KiiRTransfer operator, long completedInBytes, long totalSizeinBytes) {
        float progress = (float) completedInBytes / (float) totalSizeinBytes * 100.0f;
      }
    
      @Override
      public void onTransferCompleted(KiiRTransfer operator, Exception exception) {
        if (exception != null) {
          // Handle the error.
          return;
        }
      }
    });

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

  • (必要に応じて)KiiObject にキーと値のペアをセット。ファイル名、ファイルサイズ、Object Body の有無などを登録しておくことも可能。
  • アップロード対象ファイル(sample.mp4)のリファレンスを作成。
  • アップロード対象ファイルのリファレンスを指定して uploader() メソッドを実行し、KiiUploader インスタンスを作成。
  • transfer() メソッドを実行して、ファイルのアップロードを開始。

Object Body をすでに持つ KiiObject に対して新たにファイルをアップロードした場合、このファイルにより Object Body が上書きされます。

onProgress() メソッドは、転送の進捗状況に応じて呼び出されます。転送サイズが小さい場合は、1 回目の呼び出しで 100% の進捗を示すことがあります。

何らかの理由によりアップロードが中断した場合は SuspendedException が発生します。この場合、中断箇所よりアップロードの再開を行うことができます。再開方法については アップロードの再開 を参照してください。

Object Body のアップロードで外部記憶装置にアクセスする際、実行時パーミッションが必要になる場合があります。実装方法の詳細は、実行時パーミッションの取得 を参照してください。