Удалить временный файл с FileStreamResult - PullRequest
4 голосов
/ 06 октября 2011

Я использую MVC3 для возврата временного файла, созданного в коде.Затем я использую FileStreamResult для потоковой передачи этого файла клиенту.Однако, поскольку это временный файл, который мне больше не нужен, я бы хотел его очистить.Я не знаю, как это сделать, так как я уже нажимаю на оператор return во время потоковой передачи.Спасибо.

public FileStreamResult Download()
{
    string filename = Path.GetTempFileName();
    using (FileStream stream = new FileStream(filename, FileMode.OpenOrCreate))
    {
        CreateFile(this.DataContext, stream);
    }

    using (FileStream outputStream = new FileStream(filename, FileMode.Open))
    {
        HttpContext.Response.AddHeader("content-disposition", "attachment; filename=MyFile.xlsx");
        return new FileStreamResult(outputStream,MimeTypeUtil.GetMimeType("xlsx"));
    }
}

Ответы [ 2 ]

3 голосов
/ 06 октября 2011

Похоже, точно подходит для создания пользовательских ResultFilter .Вы можете напрямую подкласс ActionFilterAttribute.Что-то в этом роде ( отсутствует часть определения имени файла )

public class ResultFilter : ActionFilterAttribute
{
    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        string fileName = //((FileStreamResult)filterContext.Result). ???

        File.Delete(fileName);
    }
}

Вы можете создать собственный ActionResult, создав подкласс FileStreamResult для передачи имени временного файла.Тогда удаление будет тривиальным.

1 голос
/ 06 октября 2011

Вам может не понадобиться временный файл, если ваш код похож на то, что вы опубликовали. (Предполагается, что ваш метод находится внутри Controller):

public ActionResult Download()
{
    using (var stream = new MemoryStream())
    {
        CreateFile(this.DataContext, stream);
        stream.Position = 0; // Not sure if this is necessary
        return File(stream, MimeTypeUtil.GetMimeType("xlsx"), "MyFile.xlsx");
    }
}

FileStreamResult является своего рода неправильным. Кажется, он принимает любой Stream объект, а не только файловые потоки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...