Вы можете зашифровать имя файла с помощью собственной опции CI:
$config['encrypt_name'] = TRUE;
ИЛИ
Вы можете сделать это с помощью собственного кода:
$new_name = time(). Вы можете зашифровать имя файла с помощью собственной опции CI:
[110] ИЛИ
Вы можете сделать это с помощью собственного кода:
[111]FILES["userfiles"]['name'];
$config['file_name'] = $new_name;
Вы захотите написать 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 . Код будет почти идентичным.
Когда вы говорите «Создать файл для экспорта», я понимаю, что вы хотите сделать его загружаемым в браузер. Если это так, то вот пример.
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
Файл, который вы еще не сохранили, представляет собой просто строковую переменную или MemoryStream. Но для больших объемов данных вы, вероятно, не захотите хранить их все в памяти. Что вы хотите делать с этим «файлом», когда он у вас есть?
Вы можете писать напрямую в Response.OutputStream и устанавливать правильный тип контента и заголовок размещения контента.
О, это неплохо. В 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.
Попробуйте этот пример:
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();
}