В ASP.NET, как заставить браузер загружать содержимое строки в файл? (С #) - PullRequest
5 голосов
/ 22 мая 2009

Я хотел бы создать текстовый файл для экспорта / загрузки, например * .csv, из приложения ASP.NET. Я знаю о Response.TransmitFile , но я хочу сделать это без физического создания и сохранения файла на сервере. Это возможно? Кто-нибудь делал что-то подобное?

Ответы [ 6 ]

13 голосов
/ 22 мая 2009

Когда вы говорите «Создать файл для экспорта», я понимаю, что вы хотите сделать его доступным для загрузки в браузер. Если это так, вот пример.

public void btnGo_Click (Object sender, EventArgs e)
{
    Response.Clear();

    string fileName= String.Format("data-{0}.csv", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss")); 
    Response.ContentType = "text/csv";
    Response.AddHeader("content-disposition", "filename=" + fileName);

    // write string data to Response.OutputStream here
    Response.Write("aaa,bbb,ccc\n");

    Response.End();
}

Цитировать: RFC 4180

4 голосов
/ 22 мая 2009

Вы захотите посмотреть на Custom HTTP Handler (класс, который реализует IHttpHandler) и просто зарегистрировать его в web.config. В этой статье на MSDN приведен хороший пример того, как его настроить.

Вот базовый пример того, как вы могли бы реализовать его, чтобы вернуть разметку для некоторых данных CSV.

using System.Web;

public class MyCsvDocumentHandler : IHttpHandler
{
    public static string Data
    {
        get;
        set;
    }

    public MyCsvDocumentHandler()
    {
    }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/csv"; // Set the MIME type.
        context.Response.Write(Data); // Write the CSV data to the respone stream.
    }

    public bool IsReusable
    {
        // To enable pooling, return true here.
        // This keeps the handler in memory.
        get { return false; }
    }
}

Эта альтернатива, которая, возможно, немного проще, заключается в использовании обработчика ASHX страницы. Код будет почти идентичен.

1 голос
/ 22 мая 2009

Вы можете написать прямо в Response.OutputStream и установить правильный тип контента и заголовок расположения контента.

1 голос
/ 22 мая 2009

Файл, который вы еще не сохранили - это просто строковая переменная или MemoryStream. Но для больших объемов данных вы, вероятно, не хотите хранить все это в памяти. Что вы хотите сделать с этим «файлом», как только он у вас появится?

0 голосов
/ 22 мая 2009

Попробуйте этот образец:

protected void Button1_Click(object sender, EventArgs e)
{
     Response.ContentType = "text/csv";
     Response.AddHeader("content-disposition", "attachment; filename=download.csv");
     Response.Write("your,csv,file,contents");
     Response.End();
}
0 голосов
/ 22 мая 2009

О, это не плохо. В Page_Load вашей страницы ASPX сделайте следующее:

Response.ContentType = "text/xml";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Write(/* your text goes here */);

Выше приведен пример, если ваш «файл» - это xml, но это может быть что угодно, от файла Excel до файла PDF. Все, что вам нужно сделать, это обновить ContentType, который вы можете найти через Google или Live.

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