Streaming videos with ASP.NET Core 3
If you want to stream the video in the browser, your server should support HTTP range requests. In such case, the server is able to send just a small portion of a content requested by the client. As you want to stream video in the browser, you can use video
html tag that requests for a content using range headers. Therefore you can also skip some time and immediately play the movie from that position, before it is completely downloaded.
ASP.NET Core 3 already has support for HTTP range requests, it is implemented in PhysicalFile
method which has attribute enableRangeProcessing. As documentation says:
Returns the file specified by physicalPath (Status200OK), the specified contentType as the Content-Type, and the specified fileDownloadName as the suggested file name. This supports range requests (Status206PartialContent or Status416RangeNotSatisfiable if the range is not satisfiable).
[Route("getFileById")]
public FileResult getFileById(int fileId)
{
...
return PhysicalFile($"C:/movies/{file.Name}", "application/octet-stream", enableRangeProcessing: true);
}
Note that the path have to be absolute (not relative).