С# Asp.net записать файл клиенту
Вопрос
Надеюсь, это быстрый вопрос.Мне нужно написать несколько отчетов, а затем предложить пользователю сохранить их на своем локальном компьютере.В последний раз, когда я делал это, я записывал файл на веб-сервер, а затем отправлял его клиенту через Response
объект.
создать на веб-сервере
TextWriter tw = new StreamWriter(filePath);
отправить клиенту
page.Response.WriteFile(path);
Вопрос в том, есть ли способ пропустить запись физического файла на веб-сервер и перейти прямо от объекта, представляющего документ, к ответу?
Решение
Вы можете использовать Response.ContentType вот так
Response.ContentType = "text/plain";
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.AddHeader("Content-Disposition", "attachment;filename=yourfile.txt");
Это, конечно, работает, если вы хотите написать текстовый файл.Например, если вы хотите написать .doc, вы измените ContentType на «application/msword» и т. д.
Другие советы
Ты можешь.
Попробуй это:
Table oTable = new Table();
//Add data to table.
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename="test.xls"");
Response.Charset = "";
this.EnableViewState = false;
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.Html32TextWriter oHtmlTextWriter = new System.Web.UI.Html32TextWriter(oStringWriter);
0Table.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();
Это предложит пользователю открыть или сохранить файл test.xls.аналогичным образом вы можете предоставить другие объекты ASP.NET вместо Table.
Да.
page.Response.WriteFile(yourData, 0, yourData.Length);
Точный ответ на вопрос зависит от того, как у вас организован отчет (т.е.о каком «объекте» вы говорите).Если у вас есть одна строка, вы можете использовать Response.Write, чтобы просто записать ее.Если вам нужен TextWriter, вам нужен Response.Output - таким образом вы можете пропустить запись на диск, а затем использовать WriteFile.Кроме того, если ваш контент оказался двоичным, вы можете использовать для этого Response.OutputStream.
Вы также можете установить Response.AddHeader("Content-Disposition", "attachment"), если хотите, чтобы пользователь видел диалоговое окно сохранения файла.Однако Content-Disposition не обязательно соблюдается, поэтому пользователь все равно может открыть отчет непосредственно в браузере.Не забудьте установить заголовки перед выводом фактического содержимого!
Кроме того, в зависимости от формата отчета вы можете установить для Response.ContentType что-то подходящее, например text/plain, text/csv или что-то еще.Правильные типы MIME перечислены на странице сайт IANA.