Próbuję zwrócić duże pliki za pośrednictwem kontrolera ActionResult i zaimplementowałem niestandardową klasę FileResult, jak poniżej.FileResult buforowany do pamięci
public class StreamedFileResult : FileResult
{
private string _FilePath;
public StreamedFileResult(string filePath, string contentType)
: base(contentType)
{
_FilePath = filePath;
}
protected override void WriteFile(System.Web.HttpResponseBase response)
{
using (FileStream fs = new FileStream(_FilePath, FileMode.Open, FileAccess.Read))
{
int bufferLength = 65536;
byte[] buffer = new byte[bufferLength];
int bytesRead = 0;
while (true)
{
bytesRead = fs.Read(buffer, 0, bufferLength);
if (bytesRead == 0)
{
break;
}
response.OutputStream.Write(buffer, 0, bytesRead);
}
}
}
}
Problemem jest to, że cały plik wydaje się być buforowany do pamięci. Co powinienem zrobić, aby temu zapobiec?
Dlaczego nie używasz istniejącego FileStreamResult? –
Początkowo próbowałem użyć FileStreamResult, ale również buforuje plik do pamięci. –