У меня есть 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));
}
Что приводит к этой ошибке:
Вторая тактика заключалась в загрузке большого двоичного объекта:
var tempLink = document.createElement('a') as HTMLAnchorElement;
tempLink.href = vidURL;
tempLink.setAttribute('download', 'filename.mp4');
tempLink.click();
, который действительно загружаетв ваш браузер не воспроизводимый файл с ошибкой 0xc10100be.
На данный момент я даже не уверен, является ли ошибка на стороне клиента, на стороне сервера или в комбинации обоих.Любая помощь будет принята с благодарностью!