Ich erstelle derzeit eine API in ASP.NET Core 3 als mein erstes Projekt mit .NET Core.
Ich versuche gerade, ein Video an mein React.js-Frontend zu senden, um es im Browser anzusehen. Das Hochladen von Dateien und Videos funktioniert problemlos und die unten gezeigte Methode sendet bereits eine Datei an den Client. Wenn das Video jedoch länger als einige Sekunden ist, ist der Videoplayer sehr langsam und das Überspringen dauert ebenfalls lange ein paar Sekunden des Videos. Ich denke, das liegt daran, dass die Datei zuerst vollständig heruntergeladen und dann abgespielt wird.
[Route("getFileById")]
public FileResult getFileById(int fileId)
{
var context = new DbContext();
var file = context.File.Find(fileId);
if (file == null)
{
Console.WriteLine("file " + fileId + " not found");
return null;
}
var content = new FileStream(file.Name, FileMode.Open, FileAccess.Read, FileShare.Read);
var response = File(content, "application/octet-stream");
return response;
}
Ich denke, der Weg, um mein Problem zu lösen, besteht darin, die Datei zu streamen und nicht als Ganzes zu senden. Ich habe bereits gegoogelt, wie Videos mit ASP.NET Core 3 gestreamt werden, aber ich finde nur Websites, die dies für ASP.NET Core 2 erklären (z. B. http://anthonygiretti.com/2018/01/16/streaming-video-asynchronously) -in-asp-net-core-2-with-web-api / )
Ich habe bereits versucht, den Code auf diesen Websites zu verwenden, aber die Art und Weise, wie sie es getan haben, ist nicht mit ASP.NET Core 3 kompatibel.
Wie kann ich Dateien in ASP.NET Core 3 streamen?
quelle
Antworten:
Wenn Sie das Video im Browser streamen möchten, sollte Ihr Server HTTP-Bereichsanforderungen unterstützen . In diesem Fall kann der Server nur einen kleinen Teil eines vom Client angeforderten Inhalts senden. Wenn Sie Videos im Browser streamen möchten, können Sie ein
video
HTML-Tag verwenden, das mithilfe von Bereichskopfzeilen einen Inhalt anfordert. Daher können Sie auch einige Zeit überspringen und den Film sofort von dieser Position aus abspielen, bevor er vollständig heruntergeladen wird.ASP.NET Core 3 unterstützt bereits HTTP-Bereichsanforderungen. Es ist in einer
PhysicalFile
Methode mit dem Attribut enableRangeProcessing implementiert . Wie die Dokumentation sagt:Beachten Sie, dass der Pfad absolut (nicht relativ) sein muss.
quelle