如何在Angular 5中解析和播放来自数据库的Blob/Binary数据

How to parse and play Blob/Binary data from database in Angular 5

在我的 Angular 5 应用程序中,我正在检索在 SQL 服务器数据库中存储为 VARBINARY(MAX) 的数据。在数据库字段中看起来像这样:0xFEA47E451A40AE4571E51F...

当我通过 .NET WebAPI 使用 GET 调用从数据库中检索它时,它在我的 Angular 应用程序的控制台中显示如下:aFwwbUYFjhvbv=bhBGVJHvchjhcbsHKfvHbbh...

我知道此数据的 MIME 类型(它是 MP3 或 WAV)。我如何在 Angular 5 客户端中 parse/read 此数据并使用 HTML <audio> 组件播放它?

我看了几个相关的解决方案,但由于一个或另一个错误,none似乎适用,或者可能是我缺乏理解。

我的假设是 Blob 数据具有我可以播放的音频内容。我必须先将其转换为文件。这就是我正在尝试的:

const file = new File([blobData], "audio.mp3")
this.audioSource = URL.createObjectURL(file)

并且在 HTML 中,我指定 audioSource 作为 HTML5 组件的来源。

<audio [src]="audioSource" type="audio/mp3"></audio>

这会导致 net::ERR_UNKNOWN_URL_SCHEME 错误。

我也试过 sanitizer.bypassSecurityTrustUrl(this.audioSource) 但这也不起作用。我做错了什么,我怎样才能达到预期的效果?

请检查这个答案:

如果您有包含正确二进制文件的 blob 数据,您所要做的就是使用 URL.createObjectURL(blob) 创建 URL,然后将其作为源传递给音频标签。 (检查第 3 步)

如果您没有包含正确二进制文件的 blob 数据,您可以按照步骤 2 中所示创建 blob 数据。

我创建了一个 Angular example,它通过自定义管道使用 DomSanitizer

<audio [src]="audioSource | safe:'url'" id="audio" controls #audioTag></audio>

参考:

Angular 使用参考实现:https://stackblitz.com/edit/angular-audio-blob

DomSanitizer 示例:https://medium.com/@swarnakishore/angular-safe-pipe-implementation-to-bypass-domsanitizer-stripping-out-content-c1bf0f1cc36b

希望对您有所帮助。请记住,您所需要的只是有效的 blob 数据。