Мне нужно проверить, успешно ли загружен файл. Мой результат действия возвращается CheckedFileStreamResult
. Однако OnResultExecutedhandler
выполняется даже до завершения загрузки файла.
Я использую следующее предложенное решение в моей программе:
public class CheckedFileStreamResult : FileStreamResult
{
public CheckedFileStreamResult(FileStream stream, string contentType): base(stream, contentType)
{
DownloadCompleted = false;
}
public bool DownloadCompleted { get; set; }
protected override void WriteFile(HttpResponseBase response)
{
var outputStream = response.OutputStream;
response.BufferOutput = false;
using (FileStream fs = new FileStream("D:\\ABC.pdf", FileMode.Open, FileAccess.Read))
{
var buffer = new byte[_bufferSize];
var count = fs.Read(buffer, 0, _bufferSize);
while (count != 0 && response.IsClientConnected)
{
outputStream.Write(buffer, 0, count);
response.Flush();
count = fs.Read(buffer, 0, _bufferSize);
}
DownloadCompleted = response.IsClientConnected;
}
}
private const int _bufferSize = 0x200;
}
Используя этот механизм, я не могу добиться желаемого эффекта. Обработчик OnResultExecuted
выполняется до полной загрузки файла, а флаг DownloadCompleted
создает ложное впечатление. Пожалуйста, объясните мне, как действовать.