Отправка аудиозаписи в веб-API C# ASP.NET.C#

Место общения программистов C#
Ответить
Anonymous
 Отправка аудиозаписи в веб-API C# ASP.NET.

Сообщение Anonymous »

Я пытаюсь записать аудиофайл в Интернете с помощью angular/typescript. Я могу успешно записать звук и прослушать его с помощью аудиоплеера. Я пытаюсь взять этот звук и отправить его в сообщение веб-API C# ASP.NET. Я попытался преобразовать его в formdata для передачи в виде файла, но в результате получился неподдерживаемый тип носителя.
Это код, который я использую для записи звука:

Код: Выделить всё

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
import { bufferToWave } from './audio-helper'
import { RESTAPIService } from './restapiservice.service';

@Injectable({
providedIn: 'root'
})

export class AudioRecordingService {
private chunks: any[] = [];
private mediaRecorder: any;
private audioContext: AudioContext = new AudioContext();
private audioBlobSubject = new Subject();
private stream: any;

private mediaConstraints = {
audio: true
};

audioBlob$ = this.audioBlobSubject.asObservable();

constructor(private service: RESTAPIService) {
}

async startRecording() {
if (this.audioContext.state === 'suspended') {
await this.audioContext.resume();
}

this.stream = await navigator.mediaDevices.getUserMedia(this.mediaConstraints);
this.mediaRecorder = new MediaRecorder(this.stream);
this.mediaRecorder.audioChannels = 1;
this.mediaRecorder.ondataavailable = (event: any) => {
this.chunks.push(event.data);
};
this.mediaRecorder.start();
}

async stopRecording() {

if (this.mediaRecorder) {
let mimeType = this.mediaRecorder.mimeType;

this.mediaRecorder.onstop = async () => {
const audioData = await new Blob(this.chunks).arrayBuffer();
const audioBuffer = await this.audioContext.decodeAudioData(audioData);
const wavBlob = bufferToWave(audioBuffer, audioBuffer.length);
this.audioBlobSubject.next(wavBlob);

let audioBlob = new Blob(this.chunks, { type: mimeType });

await this.service.postAudio(audioBlob).subscribe(data => {
});

this.chunks = [];
};

this.mediaRecorder.stop();

if (this.stream) {
this.stream.getAudioTracks().forEach(function(track: { stop: () => void; }) {
track.stop();
});

this.stream.getVideoTracks().forEach(function(track: { stop: () => void; }) {
track.stop();
});
}
}
}
}
Код для отправки аудиоданных в веб-API C# ASP.NET:

Код: Выделить всё

  constructor(private http: HttpClient) { }

httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'multipart/form-data'
})
};

postAudio(blob: Blob)
{
const formData = new FormData();
formData.append("Test", blob);

let url = "https://localhost:7048/api/Transcribe/UploadAudio";
return this.http.post(url, formData);
}
Код веб-API C# ASP.NET:

Код: Выделить всё

[HttpPost("UploadAudio")]
public async Task UploadAudio(IFormFile formFile)
{
return Ok("");
}
Я попробовал приведенный выше код и ожидал, что файл будет передан в API C#. Вместо этого я получаю ошибку 415 или 400.

Подробнее здесь: https://stackoverflow.com/questions/787 ... et-web-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»