www.dextsolution.com
DEXTUPLOAD
X5
製品の説明 > HDアプリケーションを利用してダウンロードする

# HDアプリケーションを利用してダウンロードする

DEXTUploadX5はバージョン2.0.0.0以降、HDアプリケーションを使用したファイルダウンロード機能をサポートします。HDはWindowsデーモン（HDD）とWindowsアプリケーション（HDM）の総称です。

HDアプリケーションは、ユーザーのデスクトップで実行され、ブラウザとHTTP通信をして、ファイルのダウンロードを実行する。HDアプリケーションは、インストールがされても、ブラウザにどのようなプラグインもインストールがされていない。

dextuploadx5-configuration.jsファイルにhdDownloadURLプロパティの設定

  dextuploadx5Configuration は、コンポーネント設定を含む JavaScript オブジェクトです。 dextuploadx5Configuration オブジェクトには hdDownloadURL プロパティがあり、HD アプリケーションのインストーラをダウンロードするページへのパスを設定します。

      # dextuploadx5-configuraiton.js
      win.dextuploadx5Configuration = {
          // 省略可能
          hdDownloadURL: location.origin + "/dx5/client/dextuploadx5-hd-download.html"
      }

  HDアプリケーションがインストールされていない場合、hdDownloadURLに設定されたアドレスがポップアップで開かれます。 インストールされたHDアプリケーションがDEXTUploadX5バージョンより低いバージョンの場合、hdDownloadURLに設定されたアドレスのページがポップアップで開き、高いバージョンをダウンロードすることができる。

  * 上記のページは、製品に組み込まれているダウンロードページでは、各サイトに合うように作られた独自のページを使用することを推奨する。

  * Windows OSの場合、HDアプリケーションをインストールするときにUser Account Controlウィンドウで許可をヘジュォヤマン正しく使用が可能である。

ダウンロードアイテムを登録する

  仮想ファイルを登録するには、addVirtualFile関数を使用するかaddVirtualFileList関数を使用する。

  - vindex：仮想ファイルを区分する唯一のキーとして、どのような形式でも構いませんが、重複してはならない。（必須項目）
  - name：仮想ファイルの名前である。（必須項目）
  - size：仮想ファイルのサイズであり、byte単位を使用する。（必須項目）
  - lock：ロック状態がtrueの場合、ファイルを削除することができない。

      var dx = dx5.get(id);
      // 個別に登録するときに
      dx.addVirtualFile({ vindex: "IDX0001", name: "virtual_file.txt", size: 12345 });
      dx.addVirtualFile({ vindex: "IDX0002", name: "locked-virtual_file.txt", size: 45678, lock: true });
      dx.addVirtualFile({ vindex: "IDX0003", name: "cosmos.jpg", size: 195779 });
      // 複数のを一度に登録するとき
      dx.addVirtualFileList([
        { vindex: "IDX0001", name: "virtual_file.txt", size: 12345 },
        { vindex: "IDX0002", name: "locked-virtual_file.txt", size: 45678, lock: true },
        { vindex: "IDX0003", name: "cosmos.jpg", size: 195779 }
      ]);

  仮想ファイルがダウンロード対象となるにjson属性中downUrlまたはurlプロパティが設定されてなければならない。

      // ダウンロードパス情報がなくてダウンロードすることができない、仮想ファイルである。
      dx.addVirtualFile({ vindex: "IDX0001", name: "virtual_file.txt", size: 12345 });
      // ダウンロードパスがあればダウンロードすることができる。
      dx.addVirtualFile({ vindex: "IDX0003", name: "bridge_509147.jpg", size: 509147, url: "http://domain/path/file/attach/bridge_509147.jpg" });
      dx.addVirtualFile({ vindex: "IDX0003", name: "bridge_509147.jpg", size: 509147, url: "http://domain/path/common-download.do?key=FID0001" });

  downUrlまたはurlプロパティの値は、必ずスキーマ（http、https）で始まるWeb URLべきである。

  URLに多言語と特殊文字が入った場合には、対象をできない検索したり、ダウンロードが失敗する場合がある。（必ずないのではなく、ブラウザの種類やバージョンごとに差があることができる。）

  このような場合、多言語と特殊文字が使用されている区間をencodeURIComponent JavaScript関数を使用してエンコードをすればよい。

      dx.addVirtualFile({
        vindex: "IDX0003",
        // エンコード不要
        name: "bridge_509147.jpg",
        size: 509147,
        // エンコードが必要
        url: "http://domain/path/file/attach/" + encodeURIComponent("bridge_509147.jpg")
      });

  HDは、ファイルをダウンロードするとき、対象を分割してダウンロードすることができる。仮想ファイルを登録するとき、chunkSize属性を使用すれば、分割されたサイズを指定することができる。個々のユーザーの立場では、大規模な体感はないが、サーバの立場では、要求に対する応答性を高めることになる。

  chunkSize属性を指定しない場合、または0に設定すると、分割せずにダウンロードを行う。

      dx.addVirtualFile({
        vindex: "IDX0003",
        name: "bridge_509147.jpg",
        size: 509147,
        url: "http://domain/path/file/attach/" + encodeURIComponent("bridge_509147.jpg"),
        // 10MBに分割サイズを指定する。（MB単位で指定可能）
        chunkSize: 10
      });

ボタンの接続

  HDアプリケーションを使用してダウンロードすると、DEXTUploadX5製品は、アイテムのダウンロードボタンを別に提供していない。

  代わりに、スクリプトを使用して外部HTMLボタンとコンポーネントの機能を接続してくれるとする。

      <button type="button" onclick="download('component-id');">ダウンロード</button>
      <script>
      function download(id) {
        // フラグの値に基づいてダウンロードを実行する。
        // AUTO：最初の仮想ファイルをダウンロードする。
        // SELECTED：選択された対象の中の最初の仮想ファイルをダウンロードする。
        // CHECKED：チェックされた対象の中の最初の仮想ファイルをダウンロードする。
        dx5.get(id).downloadToHD("AUTO");
      }
      </script>

  複雑なスクリプトを使用せずに、コンポーネントのロード時に自動的にバインド機能も付属しています。

      <button type="button" id="btn-down-auto">ダウンロード</button>
      <button type="button" id="btn-down-selected">選択ダウンロード</button>
      <button type="button" id="btn-down-checked">チェックダウンロード</button>
      <script>
        dx5.create({
          ...,
          // コンポーネントが作成されるとき、ファイルのダウンロード機能が自動的に接続するようにする。
          btnDownloadToHDAuto: "btn-down-auto",
          btnDownloadToHDSelected: "btn-down-selected",
          btnDownloadToHDChecked: "btn-down-checked"
        });
      </script>

  自動バインディング機能は非常に便利が、複雑な機能を実装するには適さないことがあります。

ダウンロード要求に応じたサーバー側の処理

      // ダウンロードする対象がウェブアドレスにさらされている場合、
      { vindex: "IDX0003", name: "bridge_509147.jpg", size: 509147, url: "http://domain/path/files/attach/bridge_509147.jpg" }
      // ダウンロードする対象がウェブアドレスに存在しないか、URL、秘匿処理のために、Webアプリケーションを使用する場合は、
      { vindex: "IDX0003", name: "bridge_509147.jpg", size: 509147, url: "http://domain/path/files/service/common-download.do?key=FID0001" }

  次は、Java JSPやサーブレット環境でDEXTUploadNJ製品を使用してサービスを実装した場合である。

  指定されたマッピングサーブレット（JSPも可能）でFileDownloadクラスを使用してダウンロードを処理することができる。

      # サーバー側の設定である。
      File target = null;

      String key = request.getParameter("key");
      if (key.equals("FID0001")) target = new File(fileRoot, "bridge_509147.jpg");
      else if (key.equals("FID0002")) target = new File(fileRoot, "beach_239826.jpg");
      else if (key.equals("FID0003")) target = new File(fileRoot, "cosmos (empty space) 195779.jpg");
      if (target == null  || target.exists() == false || target.isFile() == false) {
        response.sendError(HttpServletResponse.SC_NOT_FOUND, "Not found.");
        return;
      }
      try {
        // FileDownloadオブジェクトを生成する。
        FileDownload dextnj = new FileDownload();
        // エンコードをUTF-8に設定する。
        response.setCharacterEncoding("UTF-8");
        dextnj.setAllowingWeakRange(true);
        // ファイルを添付ファイル形式でダウンロードする。
        dextnj.download(request, response, target);
      } catch (Exception e) {
        throw new ServletException(e);
      }

  次は、Java Spring Webフレームワーク環境でDEXTUploadNJ製品を使用してサービスを実装した場合である。

  指定された要求にマップされたコントローラのメソッドでDEXTUploadNJFileDownloadViewクラスを使用してダウンロードを処理することができる。

      # サーバー側の設定である。
      File target = null;

      String fileRoot = request.getSession().getServletContext().getRealPath("/files/attach");
      if (key.equals("FID0001")) target = new File(fileRoot, "bridge_509147.jpg");
      else if (key.equals("FID0002")) target = new File(fileRoot, "beach_239826.jpg");
      else if (key.equals("FID0003")) target = new File(fileRoot, "cosmos (empty space) 195779.jpg");
      // エンコードをUTF-8に設定する。
      response.setCharacterEncoding("UTF-8");
      if (target == null  || target.exists() == false || target.isFile() == false) {
        response.sendError(HttpServletResponse.SC_NOT_FOUND, "Not found.");
        return null;
      } else {
        // DEXTUploadNJFileDownloadViewビュークラスを使用してファイルをダウンロードすることができる。
        DEXTUploadNJFileDownloadView dextnj = new DEXTUploadNJFileDownloadView(target);
        dextnj.setAllowingWeakRange(true);
        return new ModelAndView(dextnj);
      }

HDアプリケーション画面の説明

  ダウンロードボタンをクリックするか、downloadToHDメソッドが呼び出されると、以下のようにHDのプログラムが実行され、対象項目が追加になった後、すぐにダウンロードが開始される。

  ダウンロード対象の項目がダウンロード完了した状態であれば、右側に緑色のチェックアイコンが見える。このアイコンをクリックすると、対象となっダウンロードされた位置が開き、Xアイコンをクリックすると、アイテムをリストから削除する。

  もし自動ダウンロードオプションが指定されていなければ、ファイルはダウンロードすることが待機状態にようになり、右側に青色再生（ダウンロード）アイコンで表示がされ、このアイコンをクリックすると、その項目のみダウンロードを実行する。

  下段バーの左側には、全体の項目をダウンロード、完全なアイテムを停止すると、全体の項目を削除するボタンがあり、下のバーの右側には、選択した項目のダウンロード順序を変更するボタンがあります。

HDアプリケーションのオプション

  HDアプリケーションタイトルバーの星形のアイコンをクリックするか、またはマウス右クリックをして「環境設定」ウィンドウを浮かべオプションを調整することができる。

  もし自動ダウンロードオプションが指定されていなければ、ファイルはダウンロードすることが待機状態にようになり、右側に青色再生（ダウンロード）アイコンで表示がされ、このアイコンをクリックすると、その項目のみダウンロードを実行する。

  下段バーの左側には、全体の項目をダウンロード、完全なアイテムを停止すると、全体の項目を削除するボタンがあり、下のバーの右側には、選択した項目のダウンロード順序を変更するボタンがあります。

  - 保存パス

    ファイルをダウンロードする基準パスを表し、変更が可能である。

  - 項目を追加するたびに、プログラムを有効に

    HDのアプリケーションに項目が追加されると、これを確認することができるようHDアプリケーションが表示される。（たまに他のプログラムが先取りしてHDのアプリケーションが最前面に表示されない場合もある。）

  - 新しいアイテムが追加されるとすぐにダウンロードを開始

    HDアプリケーションが追加されるとすぐに、ターゲットをダウンロードしたり、ダウンロードすることができるように待機状態になる。デフォルトでは、チェック状態であるが、チェック終了すると、ユーザーが直接ダウンロードボタンをクリックしてダウンロードを実行する必要がある。

  - エントリの削除時に一時ファイルを削除（レジュームサポートなし）

    HDアプリケーションは、レジュームがデフォルトの動作であり、リストからターゲットを削除がされたとしても、次にダウンロードするときは、レジュームが行われる。ただし、このオプションをチェックすると、対象項目を再度追加してダウンロードをすると、最初から降り受信を開始する。（このオプションを使用する理由は、サーバーに問題があり、ダウンロード対象の変動があったりする場合に、ダウンロード処理に問題が発生する可能性があるからである。）このオプションは、アイテムが削除された後のレジューム動作に関連するものでにより、その他の過程で発生するレジュームには影響を及ぼさない。

  - 未完了の状態で終了したアイテムを、プログラム起動時に自動的にダウンロードを開始

    ファイルをダウンロードしている途中に、プログラムの実行が中断（Exitコマンドを使用して、完全に終了した場合）されてオフになると、次に再びプログラムが起動したときに、中断されたダウンロードが再開となるようにするためのオプションである。ダウンロードがされている対象は、プログラムが中断された時点でダウンロードしていた項目に限定する。

  - ファイル情報の保存オプション

    プログラムの実行が中断されたとき、リストにあった項目の中で、次のプログラムが再度実行されるとき、回復（リストに含まれる）する対象を指す。（もし「ダウンロード中」がチェック解除がされた状態であれば「未完了の状態で終了したアイテムを、プログラム起動時に自動的にダウンロードを開始」オプションがチェックされた状態であっても読み込む対象がないため、ダウンロード作業が進行されない。）

HDアプリケーションを削除する

  - Windows用のHDアプリケーションは、[コントロールパネル]内の[プログラムと機能]メニューから「DEXTUploadX5 HD」を選択して削除できます。

HDアプリケーションの制限

  - ログインアカウントに管理者権限がない場合、HDアプリケーションは自動的に起動しません。

    HDアプリケーションを手動で起動するには、製品のインストール場所にある「DEXTUploadX5-HDD.exe」ファイルを実行します。

  - HDアプリケーションは、ファイルをすぐに実行する機能を提供していない。

  - HDアプリケーションは、ブラウザを介してファイルをダウンロードすることがないため、ブラウザのクッキーとセッションと認証情報を共有していない。

  - ローカルホスト以外の安全でない接続を使用するWebアプリケーションは、HDと通信できません。 「既知の問題」ドキュメントの「プライベートネットワークアクセス仕様に従ったHDアプリケーションとの通信障害」セクションを参照してください。
  - Amazon S3、NAVER CLOUD PLATFORM Object Storage、およびMicrosoft Azure Blob Storageからのオブジェクトのダウンロードはサポートされていません。