.Net core api post endpoint возвращает файл mp4 для реакции клиента - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть API-интерфейс ядра dotnet и интерфейс для реагирования (созданный с помощью create-реагировать-app), где я хочу, чтобы клиент связался с API через конечную точку post и получил файл mp4.

Конечная точка выглядит следующим образом:

[HttpPost]
[Route("mediaUploadTest")]
[DisableRequestSizeLimit]
public HttpResponseMessage mediaUploadTest()
{
    var response = new HttpResponseMessage(HttpStatusCode.OK);
    var currDir = Directory.GetCurrentDirectory();
    var pathToFile = Path.Combine(currDir, "sample-video.mp4");
    var stream = new System.IO.FileStream(pathToFile, System.IO.FileMode.Open, FileAccess.Read);
    response.Content = new StreamContent(stream);
    return response;
}

Я поиграл с заголовками безуспешно.

Реагируя на вещи, я нашел лучший способ получить явный блоб типаиз ответа и попробовал два различных способа обработки этого до сих пор.

Первый, я создаю элемент видео и устанавливаю src или srcObject для BLOB-объекта:

var mediaUploadPromise = fetch("/api/main/mediaUploadTest", {
    method: 'POST'
})
Promise.all([mediaUploadPromise]) 
    .then(function(responses){
      responses.forEach(async r => {
        if(!r.ok) {
          console.log(r);
          throw new Error('Network response was not ok.');
        }
        else if(r.status == 200){
          var data = new Blob([await r.blob()], {type: 'video/mp4'});
          var vidURL = window.URL.createObjectURL(data);

          var video = document.createElement('video');
          try {
            video.srcObject = data;
          } catch (error) {
              video.src = vidURL;
          }
          video.autoplay = true;
          document.body.appendChild(video);

          video.play();
        }
      })
    })
    .catch(error => console.error('Error:', error));
  }

Что приводит к этой ошибке:

enter image description here

Вторая тактика заключалась в загрузке большого двоичного объекта:

var tempLink = document.createElement('a') as HTMLAnchorElement;
tempLink.href = vidURL;
tempLink.setAttribute('download', 'filename.mp4');
tempLink.click();

, который действительно загружаетв ваш браузер не воспроизводимый файл с ошибкой 0xc10100be.

На данный момент я даже не уверен, является ли ошибка на стороне клиента, на стороне сервера или в комбинации обоих.Любая помощь будет принята с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...