rempei
@rempei

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

音楽ファイルが送れない

解決したいこと

下記のコードのようにしてpublicに入っている音楽ファイルのパスをBattleMode.javaのindex(String name, String bgm)に送りたいのですが上手くいきません。送り方はあっているでしょうか?
encodedNameだけを送るときは正常に送れています。

該当するソースコード

// Edit>index.html
<select name="BGM" class="battle-bgm">
    <option value="../../../public/music/ジム戦.mp3">ジム戦</option>
</select>
<button class="edit-footer-btn" id="battle-start">バトルスタート</button>

<script>
const battleStartBtn = document.getElementById("battle-start");
const selectedBGM = document.querySelector(".battle-bgm").value;
          
battleStartBtn.addEventListener("click", () => {
  window.location.href = "/BattleMode/index.html/" + encodedName + "/" + selectedBGM;
});
</script>

//encodedNameには正常なデータが入っています
ルーティング設定
GET     /BattleMode/index.html/{name}/{bgm}           BattleMode.index

ちなみに

public class BattleMode extends Controller {

  public static void index(String name, String bgm) {
    render(bgm);
  }
  

でbgmをindex.htmlに渡して

// BattleMode>index.html
<audio class="battle-bgm" loop src="${bgm}"></audio>
<script>
  const battleBGM = document.querySelector(".battle-bgm");
  window.addEventListener("DOMContentLoaded", () => {
    battleBGM.play();
  });
</script>

上記のように再生しようとしています

0

1Answer

Routerの仕様を把握してないのでなんともですが,HTMLのsrc属性に値を入れるということはそのURLでクライアントから音声ファイルにアクセスできないといけないので,サーバー視点のファイルパスを渡してもだいたいうまくいかないことになります.

大体の場合クライアントサイドから見える部分にサーバー側のファイルパスを書くのはセキュリティ上あんまりよくない行為です.
サーバー側の処理によっては攻撃が可能になります.

サーバー側で適当なMapを作って,その識別子でBGMを選択できるようにしてください.

2Like

Comments

  1. @rempei

    Questioner

    ありがとうございました!解決しました!

Your answer might help someone💌