В ASP.NET, как заставить браузер загружать строковое содержание в файл? (C#)

Вы можете зашифровать имя файла с помощью собственной опции CI:

$config['encrypt_name'] = TRUE;

ИЛИ

Вы можете сделать это с помощью собственного кода:

$new_name = time().

Вы можете зашифровать имя файла с помощью собственной опции CI:

[110]

ИЛИ

Вы можете сделать это с помощью собственного кода:

[111]FILES["userfiles"]['name']; $config['file_name'] = $new_name;
5
задан Cheeso 29 May 2009 в 13:42
поделиться

6 ответов

Вы захотите написать 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 . Код будет почти идентичным.

4
ответ дан 18 December 2019 в 08:31
поделиться

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

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

13
ответ дан 18 December 2019 в 08:31
поделиться

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

1
ответ дан 18 December 2019 в 08:31
поделиться

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

1
ответ дан 18 December 2019 в 08:31
поделиться

О, это неплохо. В 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.

0
ответ дан 18 December 2019 в 08:31
поделиться

Попробуйте этот пример:

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
ответ дан 18 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: