質問

投稿者:i
登録日:2024年10月28日(月)

ファイルフィールドの情報について

APIで取得したレコードから、ファイルフィールドのfileName、urlを取得し、bodyに表示させたいと考えております。 取得したレコードのファイルフィールドの情報は、コードブロック「ファイルフィールド」の通りです。 こちらを活用して、コードブロック「エラーコード」のようなコードを記載してみたところ、.fileNameや.urlが原因でエラーが発生しております。 今回、fileNameとurlを取得し、リンクをクリックすることによってファイルのダウンロードができる機能を実装したいのですが、ダウンロードに必要な情報を取得することができていない状況です。 ①fileNameとurlの取得方法 ②①を活用したファイルダウンロードの方法 上記、2点についてご教授いただけますと幸いです。

ファイルフィールド
file(…ファイルフィールドの識別名)[{createdAt=xxxxxx, fileName=xxx.txt, fileSize=xx, fileKey=xxx, url=xxx}]
エラーコード
※response_data…APIの取得結果
※file…ファイルフィールドの識別名

<th:block th:each="items:${cp.result.value['response_data']['items']}">
	<th:block th:each="fileDetail:${items.file}">
       <p th:text="'添付データ: ' + ${fileDetail.fileName}"></p>
       <p th:text="'添付データ: ' + ${fileDetail.url}"></p>
</th:block>
更新日:2024年11月1日(金)
いいね

コメント

  • 1ファイルのみをダウンロードすることを想定したものですが、 サンプルプログラムを用意しております。 よろしければ、ご参照の上お試しいただけますと幸いです。 ▼ver.2 で DB に登録されているファイルをダウンロードするサンプルプログラム https://knowledge.spirers.jp/article/development/detail/1514

    • いいね
    2024年10月30日(水)
  • i

    サンプルプログラムの共有ありがとうございます。 1ファイルのダウンロードを想定とのことですが、複数ファイルのダウンロードはできないのでしょうか? ・条件に該当する複数レコードをAPIで取得したい(レコード取得APIで実装済み) ・取得したレコードの情報をbodyに渡したい(Thymeleafで実装済み) ・取得したレコードのファイルフィールド※の情報をbodyに渡し、リンクからダウンロードができるようにしたい ※1レコードあたり最大10ファイル 大まかですが、上記の流れを実装したいと考えております。

    • いいね
    2024年10月30日(水)
  • ■ファイルフィールドのurlについて レコード取得APIで取得しているファイルフィールドのurlは、 ファイルダウンロード用APIを叩くためのurlなので、画像のパスではございません。 bodyに渡したurlをクリックするとファイルがダウンロードされるものではないので、ご注意ください。 ■複数ファイルのダウンロードについて ファイルダウンロード実行ページを作成し、ダウンロード実行ページのURLパラーメータにレコードIDおよびファイルキーをつけた別タブリンクを作成いただく実装になります。 【ファイルダウンロード実行ページの処理】 1.PHPでレコードIDおよびファイルキーを元にファイルダウンロードAPIを実行 2.ダウンロードAPIでレスポンスされたデータをbase64形式データに変換してThymeleafに渡す 3.JavaScriptでThymeleafに渡された値をファイル化し、ダウンロード処理をページ表示時に実行する形で作成 ※ レコードIDおよびファイルキーが流出した場合にだれでもダウンロードできてしまうので、アクセス制御を入れることを推奨いたします。 ▼APIメソッドごとのサンプルコードまとめ Record File https://knowledge.spirers.jp/article/development/detail/5503 ▼ファイルをダウンロード APIリファレンス https://docs.spiral-platform.com/api/#operation/downloadFile ■APIで取得した情報をbodyに表示する方法 複数ファイルのダウンロードの処理のイメージでファイル名をファイルダウンロード実行ページのURLにする形で記載いたしました。

    BODY
    <th:block th:each="items:${cp.result.value['response_data']['items']}">
        <a th:each="fileDetail:${items.file}" th:href="|ファイルダウンロード実行ページURL?filekey=${fileDetail.url}&recordid=${items['_id']}|" th:text="|ファイル名: ${fileDetail.fileName}|"></a>  
    </th:block>
    • いいね
    2024年11月1日(金)