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

Указание имени файла для динамического PDF файла в asp.net

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

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

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

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

4b9b3361

Ответ 1

Добавить размещение контента в заголовок:

Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf""");

Ответ 2

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

Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));

Ответ 3

Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");

Ответ 4

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

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

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

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

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

Ответ 5

 Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")