Przesyłanie strumieniowe dużych plików wideo .net
Próbuję przesłać strumieniowo duży plik w formularzach internetowych z HttpHandler. Nie działa, ponieważ nie przesyła strumieniowo pliku. Zamiast tego odczyt pliku do pamięci wysyła go z powrotem do klienta. Poszukuję rozwiązania, a rozwiązanie mówi mi, że przesyła strumieniowo plik, gdy robią to samo. Moje rozwiązanie to strumień:
using (Stream fileStream = File.OpenRead(path))
{
context.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(360.0));
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.AppendHeader("Content-Type", "video/mp4");
context.Response.AppendHeader("content-length", file.Length);
byte[] buffer = new byte[1024];
while (true)
{
if (context.Response.IsClientConnected)
{
int bytesRead = fileStream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0) break;
context.Response.OutputStream.Write(buffer, 0, bytesRead);
context.Response.Flush();
}
else
{
break;
}
}
context.Response.End();
}
To, co dzieje się w przypadku małych plików, jeśli debuguję kod, będzie odtwarzać wideo, ale nie dotrze do linii context.Respond.End (). Ale w przypadku dużych plików nie zadziała, ponieważ przechowuje cały plik w pamięci, co może powodować problemy.