Подтвердить что ты не робот

С# Asp.net записывает файл клиенту

Мне нужно написать несколько отчетов, а затем попросить пользователя сохранить его на своем локальном компьютере. В последний раз, когда я это сделал, я написал файл на веб-сервер, а затем отправил его клиенту с помощью объекта Response.

для создания на веб-сервере

TextWriter tw = new StreamWriter(filePath);

отправить клиенту

page.Response.WriteFile(path);

Вопрос: есть ли способ пропустить запись физического файла на веб-сервер и перейти прямо от объекта, представляющего документ, к ответу?

4b9b3361

Ответ 1

Вы можете использовать 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" и т.д....

Ответ 2

Вы можете.

Попробуйте следующее:

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 вместо таблицы.

Ответ 3

Да.

page.Response.WriteFile(yourData, 0, yourData.Length);

Ответ 4

Точный ответ на вопрос зависит от того, как вы организовали свой отчет (т.е. что такое "объект", о котором вы говорите). Если у вас есть одна строка, вы можете использовать Response.Write, чтобы просто написать ее. Если вам нужен TextWriter, Response.Output - это то, что вы хотите - таким образом вы можете пропустить запись на диск, а затем с помощью WriteFile. Кроме того, если ваше содержимое оказалось двоичным, вы можете использовать Response.OutputStream для этого.

Вы также можете установить Response.AddHeader( "Content-Disposition", "attachment" ), если вы хотите, чтобы пользователь увидел диалог сохранения файла. Однако Content-Disposition не обязательно соблюдается, поэтому пользователь все равно может получить отчет, открытый непосредственно в браузере. Не забудьте установить заголовки перед выводом фактического содержимого!

Кроме того, в зависимости от формата отчета вы можете установить Response.ContentType на что-то подходящее, например text/plain, text/csv или что бы вы ни делали. Правильные типы mime перечислены в сайте IANA.