Проще говоря, я хотел бы, чтобы кто-то смог нажать на ссылку и получить PDF с одним разовым использованием. У нас есть библиотека для создания файлов PDF, таким образом, это не проблема.
Мы могли генерировать ссылку на aspx страницу, иметь ту страницу, генерируют PDF, сохраняют PDF к файловой системе и затем Ответ. Перенаправление к сохраненному PDF. Затем мы должны были бы так или иначе отслеживать и очистить файл PDF.
Так как мы никогда не должны сохранять эти данные, что я хотел бы сделать вместо этого, если это возможно, должен иметь aspx страницу, генерируют PDF и служат ему непосредственно назад в качестве ответа на исходный запрос. Действительно ли это возможно?
(В нашем случае мы используем C#, и мы хотим служить PDF назад, но кажется, что любое решение, вероятно, работало бы на различные языки.NET и возвратило типы файлов.)
Предполагая, что вы можете получить байт []
, представляющий свой PDF:
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition",
"attachment;filename=\"FileName.pdf\"");
Response.BinaryWrite(yourPdfAsByteArray);
Response.Flush();
Response.End();
Посмотрите, как HTTP работает. Клиент (= браузер) не полагается на расширения, он хочет только сервер, чтобы вернуть некоторые метаданные вместе с документом.
Метаданные могут быть добавлены с помощью Response.addheader, а одна «линия метаданных» состоит из имени и значения.
Тип контента - это свойство, в котором вы заинтересованы, и значение является типом MIME данных (исследование: RFC1945 для заголовков HTTP, Google для MIME).
Для порядковых страниц ASPX (HTML, ....) Свойство - «Текст / HTML» (не очень тривиально, но для этого примера достаточно.). Если вы вернете изображение JPG, он может иметь имя «image.gif», но до тех пор, пока вы отправляете «Image / JPEG» в тип Content, он обрабатывается как изображение JPG. Тип содержимого для PDF - «Приложение / PDF».
Браузер будет действовать в соответствии с поведением по умолчанию, например, с плагином Adobe, он будет отображать PDF в окне IT, если у вас нет плагина для PDF, он должен загрузить файл и т. Д. ..
Заголовье по утилизации контента говорит, что вы должны сделать с данными. Если вы хотите явно клиент «скачать» некоторые HTML / PDF / что угодно, и не отображать его по умолчанию, значение «Вложение» - это то, что вы хотите. Он должен иметь другой параметр, (как предложил Джастин Нисснер), который используется в случае чего-то вроде:
http: //server/download.aspx? File = 11 -> Успокой из контента: вложение; filename = file.jpg говорит, как файл должен быть по умолчанию с именем.