Angularjs захватить аудио и загрузить файл

Я создаю веб-приложение, в котором вы можете записывать звук из браузера, а затем загружать его на сервер, чтобы другие пользователи могли его слушать, давать вам оценку, исправления - изучение языка.

У меня есть части кода, но я не могу понять, как их объединить:

JS (скрипт для записи звука - работает нормально, пропущена часть для кнопки записи и остановки):

navigator.mediaDevices.getUserMedia({audio:true})
.then(stream => {handlerFunction(stream)})

function handlerFunction(stream) {
    rec = new MediaRecorder(stream);
    rec.ondataavailable = e => {
        audioChunks.push(e.data);
        if (rec.state == "inactive") {

            let blob = new Blob(audioChunks, {type:'audio/mpeg-3'});
            recordedAudio.src = URL.createObjectURL(blob);
            recordedAudio.controls = true;

            var url = recordedAudio.src;
            var link = document.getElementById("download");
            link.href = url;
            link.download = 'audio.wav';
        }
    }
}

Часть HTML для создания элементов управления: запись, остановка, затем загрузка записанного аудио:

<button id = "record">Record</button>
<button id = "stopRecord">Stop</button>
<p> <audio id = "recordedAudio"></audio></p>
<div id = "recordings"><a id = "download"> Download</a></div>

Затем у меня есть средство выбора файла и директива AngularJS для загрузки файла - после вызова: doUploadFile () файл попадает в контроллер и загружается на сервер.

Загрузка работает нормально с выбором файла, но я не знаю, как объединить два фрагмента кода вместе.

<form>
    <input type = "file" file-model = "uploadedFile">
    <button type = "submit" ng-click = "doUploadFile()">Upload</button>
</form> 

Директива загрузки файла:

.directive('fileModel', ['$parse', function($parse) {
    return {
        restrict: 'A',
        link: function(scope, element, attrs) {
            var model = $parse(attrs.fileModel);
            var modelSetter = model.assign;

            element.bind('change', function() {
                scope.$apply(function() {
                    modelSetter(scope, element[0].files[0]);
                });
            });
        }
    };
}]);

Чего я хочу здесь добиться:

  1. После окончания записи выскакивает кнопка / ссылка

  2. Эта ссылка связана с записанным аудиофайлом

  3. Нажатие этой кнопки вызывает метод doUploadFile ()

Как изменить код и соединить две части, чтобы мы могли загрузить сразу после завершения записи?

Я все еще новичок в AngularJS, буду очень рад вашей помощи!

нашел этот пост, попробую модификацию: stackoverflow.com/questions/13333378/…

szark 21.09.2018 19:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
907
1

Ответы 1

РЕДАКТИРОВАТЬ

Удалось заставить его работать: Стирал форму для загрузки файла. Директива также больше не нужна. Код для записи и загрузки складываю вместе. Я добавил объект FormData внутри контроллера и добавил большой двоичный объект. Теперь работает нормально.

var data = new FormData();


$scope.doUploadFile = function() {
    var url = "/uploadfile";

    var config = {
            transformRequest: angular.identity,
            transformResponse: angular.identity,
            headers : { 'Content-Type': undefined }
    }

    $http.post(url, data, config)
    .then(function(response) {
        $scope.uploadResult = response.data;
        data = new FormData();
    });
};

navigator.mediaDevices.getUserMedia({audio:true})
.then(stream => {handlerFunction(stream)})

function handlerFunction(stream) {
    rec = new MediaRecorder(stream);
    rec.ondataavailable = e => {
        audioChunks.push(e.data);
        if (rec.state == "inactive") {

            let blob = new Blob(audioChunks, {type:'audio/mpeg-3'});
            recordedAudio.src = URL.createObjectURL(blob);
            recordedAudio.controls = true;
            recordedAudio.autoplay = false;

            var url = recordedAudio.src;

            data.append('uploadfile', blob, "recording.wav");
        }
    }
}

Другие вопросы по теме