Указание имени файла для динамического PDF в asp.net - PullRequest
33 голосов
/ 16 сентября 2008

Как указать имя файла при сбросе данных в поток ответов?

Сейчас я делаю следующее:

byte[] data= GetFoo();
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";            
Response.BinaryWrite(data);
Response.End();

С кодом выше, я получаю "foo.aspx.pdf" в качестве имени файла для сохранения. Кажется, я помню, что смог добавить заголовок к ответу, чтобы указать имя файла для сохранения.

Ответы [ 5 ]

56 голосов
/ 16 сентября 2008

Добавить контент-расположение в шапку:

Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf""");
18 голосов
/ 16 января 2013

FYI ... если вы используете "inline" вместо "attachment", файл автоматически откроется в IE. Вместо того, чтобы предлагать пользователю диалог открытия / сохранения.

Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));
15 голосов
/ 16 сентября 2008
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");
2 голосов
/ 22 июня 2015

По некоторым причинам, большинство ответов там даже не пытаются закодировать значение имени файла. Если файл содержит пробелы, точки с запятой или кавычки, он может отображаться неправильно.

Похоже, вы можете использовать класс ContentDisposition для генерации правильного значения заголовка:

Response.AppendHeader("Content-Disposition", new ContentDisposition
{
    FileName = yourFilename
}.ToString());

Вы можете проверить исходный код ContentDisposition.ToString(), чтобы подтвердить, что он пытается правильно его кодировать.

Предупреждение : Это может произойти сбой, когда имя файла содержит тире (не дефис). Я еще не удосужился разобраться в этом.

1 голос
/ 16 сентября 2008
 Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...