Asset Share Commons のダウンロードについて

事象

Asset Share Commons では、アセット一覧画面から、複数のアセットを一括でダウンロードする機能が提供されています。

f:id:www0532:20210806152551p:plain

アセットの「ADD TO CART」アイコンをクリックすると、右上に、カートアイコンに選択したアセットの数の数字が表示されています。

f:id:www0532:20210806152917p:plain

また、カートアイコンをクリックすれば、ダウンロードのダイアログが表示され、選択した複数のアセットがZipファイルに圧縮され、一括でダウンロードされます。

f:id:www0532:20210806153652p:plain

ところが、ダウンロードしたZIPファイルを解凍してみると、フォルダの中にもう一階層のフォルダがあり、アセットはそれぞれのアセット名を付けたフォルダに格納されていました。

アセットの数が多い時、一つずつフォルダから取り出すのは、かなりの手間でしょう。

f:id:www0532:20210806154314p:plain

調査

この問題を解決するため、AEMのアセットダウンロードサービスAPIを調べるところ、今回の事象は flatStructure パラメータの設定と関連していることが分かりました。

実際は、AEMアセット一覧画面の標準的なダウンロードダイアログでも、このパラメータの設定項目が設置してあります。

f:id:www0532:20210806162100p:plain

AEMアセット一覧画面で複数のアセットを選択し、一括でダウンロードする場合、ダイアログの「Create separate folder for each asset」にチェックを入れると、ダウンロードしたZipファイルは、事象と同じ構造になります。

ここで、APIに渡される flatStructure パラメータの値は "false" でした。

また、Asset Share Commons のダウンロードでは、AEMアセット一覧画面のダウンロードと同じAPIを呼び出す想定です。

しかも、Asset Share Commons のダウンロードダイアログでは、「Create separate folder for each asset」のような項目がありません、Boolean型の flatStructure パラメータに対して、"false" との値でAPIに渡されるものと思われます。

解決

原因分かれば、改修に着手できます。一先ず、Asset Share Commons のダウンロードダイアログのソースコードを開きます。

/apps/asset-share-commons/components/modals/download/download.html

formタグを見ると、method="post"と書かれました、そして、 flatStructure の hidden項目は、やはり、想定通りに、value="false"と設定されています。

この値を"true"に変更することで、AEMのアセットダウンロードサービスAPIに、 flatStructure = "true" とのパラメータ値が渡される。

改修前

    <input type="hidden" name="flatStructure" value="false"/>

改修後

    <input type="hidden" name="flatStructure" value="true"/>

ソースコードを保存してから、もう一度ダウンロードしたZipファイルは、想定通りな構造になりました。

f:id:www0532:20210806165453p:plain