MVC3 - Как вывести файл для загрузки, не сохраняя его сначала на сервере? - PullRequest
8 голосов
/ 17 августа 2011

В PHP можно вернуть файл в браузер, отобразив его с правильным заголовком. Вам не нужно предварительно сохранять его копию на сервере.

Итак, при условии, что у меня есть куча данных, которые я хочу вернуть в виде файла Excel - после создания структуры данных с использованием OpenXML, как я могу передать файл пользователю, не предварительно сохранив его на сервере?

Ответы [ 3 ]

11 голосов
/ 21 сентября 2011

Это довольно просто на самом деле. В вашем контроллере вы можете выполнить следующее действие:

    public ActionResult GetMyFile()
    { 
        //dynamically generate a file
        System.IO.MemoryStream ms;
        ms = GenerateFile(); // Some function to return a memorystream object

        // return the file
        return File(ms.ToArray(), "filename.pdf");
    }

Пользователю будет предложено диалоговое окно с вопросом, хотят ли они открыть файл или сохранить его.

9 голосов
/ 17 августа 2011

Запишите свои данные в поток и верните их из метода действия вашего контроллера в FileStreamResult , установив свойства FileStream, ContentType и FileDownloadName.

    [HttpGet]
    public FileStreamResult MyFile()
    {
        var fileStreamResult = new FileStreamResult (GetMyContentAsStream(), "my/content-type-here");
        fileStreamResult.FileDownloadName = "my-file-download-name.here";

        return fileStreamResult ;
    }

Обновление: Для этого необходимо использовать метод Controller.File () .

    [HttpGet]
    public FileStreamResult MyFile()
    {
        return File(GetMyContentAsStream(), "my/content-type-here");
    }
2 голосов
/ 17 августа 2011

Вы можете сохранить содержимое вашего динамически сгенерированного файла в объекте MemoryStream.Когда вы возвращаете файл, вы можете использовать метод MemoryStream GetBuffer() для передачи массива байтов в качестве первого параметра.Затем установите параметры ContentType и FileDownloadName.

С уважением

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