Задать вопрос
always-prog
@always-prog
Я программист. Python, JavaScript, Django.

Как получить audio файл с сайта?

Привет.
Мне нужно получить звук .mp3 (Т.Е. его содержимое), для того чтобы записать его в файл на сервере.
Для этого я сделал нобольшую страницу index.html. Там я написал скрипт для записи звука с микрофона.
Звук записывается, и я его даже могу выставить в тег на сайт, и он нормально будет возпроизводится.
И вот не могу никак найти, как мне получит содержимое записи, для того чтобы записать это на сервер в файл.
5f5e07b3f159e055470007.png
Для записи использую navigator.mediaDevices.getUserMedia,
создаю blob, и сохраняю как audiourl
mediaRecorder.addEventListener("stop", function() {
        const audioBlob = new Blob(audioChunks, {
            type: 'audio/mp3'
        });
    const audioUrl = URL.createObjectURL(audioBlob);

На сайт звук выставляю указывая src:
audio.src = audioUrl;

Спасибо!
  • Вопрос задан
  • 684 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
zkrvndm
@zkrvndm
Архитектор решений
Blob - это и есть ваш звук!

Для его отправки на сервер нужно использовать конструктор форм FormData и отослать форму посредством AJAX.

На сервере потом смотрите глобальный массив $_FILES там и будет лежать ваш звук.

// Пример функции для отправки файла в виде Blob на сервер:

function send_blob_to_server(blob, url) {
  
  var formData = new FormData();
  formData.append('file', blob, blob.name);

  var xhr = new XMLHttpRequest();
  xhr.open('POST', url);
  
  xhr.onreadystatechange = function() {
    if (xhr.readyState === XMLHttpRequest.DONE) {
      if (xhr.status === 200) {
        alert('Запрос выполнен успешно, ответ сервера: ' + xhr.responseText);
      }
      else {
        alert('При выполнении запроса произошла неизвестная ошибка!');
      }
    }
  }
  
  xhr.send(formData);

}

// Для использовани функции первым параметром передаете Blob,
// а вторым параметром адрес куда надо отослать ваш Blob:
send_blob_to_server(audioBlob, 'https://qna.habr.com/q/846401');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы