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

StackOverflow https://stackoverflow.com/questions/74019

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Прямо сейчас я делаю следующее:

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

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

Это было полезно?

Решение

Добавьте расположение содержимого в заголовок:

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

Другие советы

К вашему сведению...если вы используете «встроенный» вместо «вложения», файл автоматически откроется в IE.Вместо запроса пользователя в диалоговом окне «Открыть/Сохранить».

Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");

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

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

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

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

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

 Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top