Ajax를 통해 Rails Controller에서 오디오 (mp3) 재생

우리는 ajax 호출에서 오디오 파일을 생성하고 해당 파일에서 데이터를 반환하고 Javascript가 페이지에서 오디오를 재생하도록하고 싶습니다. 하지만 우리는

Uncaught (in promise) DOMException: Failed to load because no supported source was found.
# in the controller
def preview
    file_name = Tempfile.new(["preview", '.mp3'], binmode: true)
  # fill file with data here

# after writing out file

    Rails.logger.debug Mp3Info.open(file_name.path)
    soundfile = File.open(file_name.path, 'r')
    binary = soundfile.read
  
    send_data binary, filename: 'preview.mp3', type: 'audio/mp3', disposition: 'inline'
end

페이지에서

<form id='test-gallery'>
<%= text_field_tag 'input-field-thing' %>
</form>

<script>
        $( "#control-thing" ).on( "click", function() {       
          var identifyingStuff = $("#input-field-thing").val();
          console.log(identifyingStuff);

          Rails.ajax({
            type: "post",
            url: "/sound_gallery/preview.js",
            data: Rails.serializeElement(Rails.$("form")[0]),
            success: (response) => {
              console.log(response);

              var blob = new Blob([response], { type: 'audio/mp3' });
              console.log(blob);

              var url = window.URL.createObjectURL(blob); //where value is the blob
              console.log(url);
              var audio = new Audio();
              audio.src = url;
              audio.play();
            },
          });
        });
</script>

console.log(response)프론트 엔드에 이진 파일로 보이는 기록합니다. 다음과 같이 보입니다 (붙여 넣기로 인해 저장되지 않기 때문에 이미지를 사용해야했습니다!).

console.log (응답)

그리고 console.log(blob)쓴다

Blob {size: 17989, type: "audio/mpeg"}

데이터가 제대로 전송되고 있다고 믿게되지만이 시점에서는 전혀 모르겠습니다.

브라우저의 '네트워크'패널 Status: 206에는 blob이 재생 될 때 표시됩니다. 이것이 브라우저 오류의 원인이 될 것이지만 '왜?'라는 질문은 여전히 ​​남아 있습니다.

나는 해결책을 찾았고 다른 사람의 일을 저장할 수있을 경우를 대비하여 여기에 남겨 두었습니다.

서버 측에서 아무것도 변경할 필요가 없습니다. send_data잘 작동합니다.

프런트 엔드에서는 Rails.ajax. 다음은 사용하여 작동하는 솔루션입니다.XMLHttpRequest

<form id='test-gallery'>
<%= text_field_tag 'input-field-thing' %>
</form>
<span id='control-thing1'>XMLHttpRequest</span>

<script>
        $( "#control-thing1" ).on( "click", function(e) {
          let token = document.getElementsByName("csrf-token")[0].content;
          e.preventDefault();
          let inputText = $('#input-field-thing').val();
          let data = JSON.stringify({'input': inputText});

          let xmlHttpRequest = new XMLHttpRequest(); 
          xmlHttpRequest.open("POST", "/sound_gallery/preview.js");
          xmlHttpRequest.responseType = "blob"; // <-- this is what can't be set in Rails.ajax
          xmlHttpRequest.setRequestHeader("Accept", "application/json");
          xmlHttpRequest.setRequestHeader("Content-Type", "application/json");
          xmlHttpRequest.setRequestHeader("X-CSRF-Token", token); 
          xmlHttpRequest.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
              var url = window.URL.createObjectURL(this.response);
              var audio = new Audio();
              audio.src = url;
              audio.play();
            }
          };

          xmlHttpRequest.send(data); 

       });

</script>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Lollipop Chrome에서 JS를 통해 로컬 mp3 파일 재생

분류에서Dev

현재보기를 통해 Android에서 비디오 재생

분류에서Dev

Django 애플리케이션에서 오디오 태그를 통해 오디오 재생

분류에서Dev

자바 스크립트를 사용하여 MP3 배열에서 무작위로 오디오를 재생하는 방법

분류에서Dev

블루투스와 AUX를 통해 각각 다른 오디오를 재생하면서 동시에 오디오를 재생할 수 있습니까?

분류에서Dev

PHP로 MP3 오디오 및 비디오 재생

분류에서Dev

자바 스크립트를 사용하여 특정 시간 (ogg / mp3)에 오디오 태그 온로드 재생

분류에서Dev

Rails를 사용하여 mp3 파일 업로드 / 재생

분류에서Dev

Bluetooth를 통해 수신 된 SensorTile (STEVAL-STLKT01V1)에서 스마트 폰에서 오디오 재생

분류에서Dev

pulseaudio : 네트워크를 통해 동시에 여러 컴퓨터에서 오디오 재생

분류에서Dev

iOS에서 JavaScript를 통해 HTML 오디오 요소를 재생할 수 없습니다.

분류에서Dev

동일한 네트워크에서 Android를 통해 컴퓨터에서 mp3 파일을 재생하는 방법 (Gmote 2.0이하는 것과 동일)?

분류에서Dev

다른 페이지 javascript를 참조하기 전에 mp3 파일을 재생하십시오.

분류에서Dev

Windows 7에서 Bluetooth 헤드셋을 통해 오디오를 재생하려면 어떻게합니까?

분류에서Dev

콘솔에서 잭을 통해 오디오를 재생하려면 어떻게합니까?

분류에서Dev

<audio> 태그를 사용하여 Angular에서 MP3 재생

분류에서Dev

SoundJS : Firefox에서 mp3를 재생할 수 없습니다.

분류에서Dev

JavaScript를 사용하여 HTML에서 mp3 재생 제어

분류에서Dev

URL에서 mp3를 재생하는 방법

분류에서Dev

Android에서 mp3를 재생 하시나요?

분류에서Dev

WKWebView를 통해로드 된 비디오에서 SwiftUI에 대한 인라인 미디어 재생 활성화

분류에서Dev

HDMI를 통한 5.1 오디오는 두 채널에서만 재생됩니다.

분류에서Dev

LAN을 통해 장치에서 TV로 비디오 재생

분류에서Dev

대화식 파이썬에서 재생되지만 bash에서는 재생되지 않는 mp3 오디오

분류에서Dev

서로 다른 오디오 장치를 통해 여러 사운드 프로세스 재생

분류에서Dev

Skype와 같은 라이브 오디오 (비디오) 대화를 통해 오디오 재생 스트림 공유

분류에서Dev

node.js : mp4를 mp3로 변환 할 때 fluent-ffmpeg에서 오류 발생

분류에서Dev

비디오를 MP3로 변환

분류에서Dev

오디오가 재생되기 전에 오디오 장치를 "테스트"해야합니다.

Related 관련 기사

  1. 1

    Lollipop Chrome에서 JS를 통해 로컬 mp3 파일 재생

  2. 2

    현재보기를 통해 Android에서 비디오 재생

  3. 3

    Django 애플리케이션에서 오디오 태그를 통해 오디오 재생

  4. 4

    자바 스크립트를 사용하여 MP3 배열에서 무작위로 오디오를 재생하는 방법

  5. 5

    블루투스와 AUX를 통해 각각 다른 오디오를 재생하면서 동시에 오디오를 재생할 수 있습니까?

  6. 6

    PHP로 MP3 오디오 및 비디오 재생

  7. 7

    자바 스크립트를 사용하여 특정 시간 (ogg / mp3)에 오디오 태그 온로드 재생

  8. 8

    Rails를 사용하여 mp3 파일 업로드 / 재생

  9. 9

    Bluetooth를 통해 수신 된 SensorTile (STEVAL-STLKT01V1)에서 스마트 폰에서 오디오 재생

  10. 10

    pulseaudio : 네트워크를 통해 동시에 여러 컴퓨터에서 오디오 재생

  11. 11

    iOS에서 JavaScript를 통해 HTML 오디오 요소를 재생할 수 없습니다.

  12. 12

    동일한 네트워크에서 Android를 통해 컴퓨터에서 mp3 파일을 재생하는 방법 (Gmote 2.0이하는 것과 동일)?

  13. 13

    다른 페이지 javascript를 참조하기 전에 mp3 파일을 재생하십시오.

  14. 14

    Windows 7에서 Bluetooth 헤드셋을 통해 오디오를 재생하려면 어떻게합니까?

  15. 15

    콘솔에서 잭을 통해 오디오를 재생하려면 어떻게합니까?

  16. 16

    <audio> 태그를 사용하여 Angular에서 MP3 재생

  17. 17

    SoundJS : Firefox에서 mp3를 재생할 수 없습니다.

  18. 18

    JavaScript를 사용하여 HTML에서 mp3 재생 제어

  19. 19

    URL에서 mp3를 재생하는 방법

  20. 20

    Android에서 mp3를 재생 하시나요?

  21. 21

    WKWebView를 통해로드 된 비디오에서 SwiftUI에 대한 인라인 미디어 재생 활성화

  22. 22

    HDMI를 통한 5.1 오디오는 두 채널에서만 재생됩니다.

  23. 23

    LAN을 통해 장치에서 TV로 비디오 재생

  24. 24

    대화식 파이썬에서 재생되지만 bash에서는 재생되지 않는 mp3 오디오

  25. 25

    서로 다른 오디오 장치를 통해 여러 사운드 프로세스 재생

  26. 26

    Skype와 같은 라이브 오디오 (비디오) 대화를 통해 오디오 재생 스트림 공유

  27. 27

    node.js : mp4를 mp3로 변환 할 때 fluent-ffmpeg에서 오류 발생

  28. 28

    비디오를 MP3로 변환

  29. 29

    오디오가 재생되기 전에 오디오 장치를 "테스트"해야합니다.

뜨겁다태그

보관