Ответ 1
Добавить размещение контента в заголовок:
Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf""");
Как я могу указать имя файла при сбросе данных в поток ответов?
Сейчас я делаю следующее:
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""");
FYI... если вы используете "встроенный" вместо "вложения", файл автоматически откроется в IE. Вместо запроса пользователю диалога Open/Save.
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 & ";")