Как я могу указать имя файла при выгрузке данных в поток ответа?
Прямо сейчас делаю следующее:
byte[] data= GetFoo();
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.BinaryWrite(data);
Response.End();
С помощью приведенного выше кода я получаю "foo.aspx.pdf" в качестве имени файла для сохранения. Кажется, я помню, как можно было добавить заголовок к ответу, чтобы указать имя файла для сохранения.





Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");
как сделать это имя файла динамическим Response.AppendHeader ("Content-Disposition", "attachment; filename =" + Projname + ".pdf"); @ Skliwz
Добавьте в заголовок content-disposition:
Response.AddHeader("content-disposition", @"attachment;filename = ""MyFile.pdf""");
Имя файла следует заключать в двойные кавычки. См. kb.mozillazine.org/…
Response.AddHeader("Content-Disposition", "attachment;filename = " & FileName & ";")
Тусклые предупреждения как предупреждение ()
К вашему сведению ... если вы используете «inline» вместо «attachment», файл откроется автоматически в IE. Вместо того, чтобы предлагать пользователю диалог Открыть / Сохранить.
Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));
Это именно то, что я искал. Следующая проблема заключается в том, что я хочу установить имя файла по умолчанию, чтобы, когда они нажимают кнопку сохранения, по умолчанию у него будет правильное имя файла. Прямо сейчас имя файла установлено на имя страницы aspx, которая сгенерировала pdf. У кого-нибудь есть предложения?
По какой-то причине большинство ответов, похоже, даже не пытаются закодировать значение имени файла. Если файл содержит пробелы, точки с запятой или кавычки, он может отображаться неправильно.
Похоже, вы можете использовать класс ContentDisposition для генерации правильного значения заголовка:
Response.AppendHeader("Content-Disposition", new ContentDisposition
{
FileName = yourFilename
}.ToString());
Вы можете проверить исходный код ContentDisposition.ToString(), чтобы убедиться, что он пытается его правильно кодировать.
Предупреждение: Кажется, происходит сбой, когда имя файла содержит тире (а не дефис). Я еще не удосужился разобраться в этом.
В именах файлов часто используются дефисы, так что это будет для нас серьезным недостатком. При обращении к соответствующей веб-странице я использую HttpUtility.UrlEncode (FileName), и я думаю, что могу сделать то же самое здесь, если это необходимо.
Если кому интересно, почему существуют и
AddHeader, иAppendHeader, больше не удивляйся ...