Вопрос

Надеюсь, это быстрый вопрос.Мне нужно написать несколько отчетов, а затем предложить пользователю сохранить их на своем локальном компьютере.В последний раз, когда я делал это, я записывал файл на веб-сервер, а затем отправлял его клиенту через 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top