Указание имени файла для динамического PDF в asp.net
Вопрос
Как указать имя файла при выгрузке данных в поток ответов?
Прямо сейчас я делаю следующее:
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 & ";")