将 blob 文件发送到服务器

Jaj*_*jan 3 javascript c# asp.net-core angular

我正在尝试将录音发送到服务器并将其保存为 .wav。我在前端使用 angular,在服务器上使用 .net core。我能够录制,然后制作一个“音频/wav”类型的blob。为了将其发送到服务器,我将其转换为数组缓冲区,然后将数组缓冲区转换为我发布到控制器的 base64 字符串。

在服务器端,当我将这些字节(从 base 64 中提取数组缓冲区后)写入 wav 文件时,我无法播放它。有人可以帮助我在 .net 控制器方面做错了什么。

如果有人知道这样做的更清洁的方法,请告诉我

als*_*ami 6

您不必创建数组缓冲区。只需使用文件输入并发送表单数据。

假设您使用的是 angular 4.3++ 并使用HttpClientModule来自@angular/common/http

角度服务方法

public uploadFile(file: File): Observable<any> {
   const formData = new FormData();
   formData.Append('myFile', file);
   return this.http.post('my-api-url', formData);
}
Run Code Online (Sandbox Code Playgroud)

现在你的 asp.net-core 端点

[HttpPost]
 // attention name of formfile must be equal to the key u have used for formdata    
public async Task<IActionResult> UploadFileAsync([FromForm] IFormFile myFile)
{
     var totalSize = myFile.Length;
     var fileBytes = new byte[myFile.Length];

     using (var fileStream = myFile.OpenReadStream())
     {
         var offset = 0;

         while (offset < myFile.Length)
         {
             var chunkSize = totalSize - offset < 8192 ? (int) totalSize - offset : 8192;

             offset += await fileStream.ReadAsync(fileBytes, offset, chunkSize);
         }
     }
   // now save the file on the filesystem
   StoreFileBytes("mypath", fileBytes);
   return Ok();
}
Run Code Online (Sandbox Code Playgroud)