ASP.NET потоковое содержимое из памяти, а не из файла - PullRequest
1 голос
/ 04 июня 2009

Пользователи запросили опцию «загрузить» представление CSV-файла содержимого GridView. Кто-нибудь знает, как это сделать, не сохраняя файл на сервере, а просто передавая его пользователю из памяти?

Спасибо

Ответы [ 4 ]

2 голосов
/ 04 июня 2009

Реализация IHttpHandler.

Я использовал нечто похожее на следующее в ProcessResponse для вывода CSV, который ранее был построен в таблице базы данных ...

public void ProcessRequest(HttpContext context)
{
    HttpResponse response = context.Response;
    HttpRequest request = context.Request;

    //Get data to output here...

    //Turn off Caching and enforce a content type that will prompt to download/save.
    response.AddHeader("Connection", "close");
    response.AddHeader("Cache-Control", "private");
    response.ContentType = "application/octect-stream";

    //Give the browser a hint at the name of the file.
    response.AddHeader("content-disposition", string.Format("attachment; filename={0}", _filename));

    //Output the CSV here...
    foreach(BatchDTO.BatchRecordsRow row in dtoBatch.BatchRecords)
        response.Output.WriteLine(row.Data);

    response.Flush();
    response.Close();
}

Существует ряд библиотек, которые облегчают генерацию CSV, вы просто должны иметь возможность передать ему Response.OutputStream, чтобы он записывал туда, а не в файловый поток.

1 голос
/ 04 июня 2009

Я создал StringBuilder и выгрузил содержимое в объект Response, используя следующий код («csv» - это переменная StringBuilder).

    Response.ContentType = @"application/x-msdownload";
    Response.AppendHeader("content-disposition", "attachment; filename=" + FILE_NAME);

    Response.Write(csv.ToString());
    Response.Flush();
    Response.End();
1 голос
/ 04 июня 2009

Использовать context.Response.OutputStream.

Вот пример.

0 голосов
/ 04 июня 2009

Я использовал библиотеку экспорта RKLib несколько раз, чтобы получить отличный эффект, это использует поток памяти и может быть предоставлен любой набор данных, который он будет экспортировать как загрузка csv:

http://www.codeproject.com/KB/aspnet/ExportClassLibrary.aspx

...