Ответ 1
См. тестовые примеры http://greenbytes.de/tech/tc2231/#inlwithasciifilenamepdf - кажется, что это просто недостающая функция в IE.
Я выводил PDF файл в веб-браузере (IE8) HttpContext.Response.writefile(fileName)
, и он отлично работает. Когда я попытаюсь сохранить файл, он даст мне имя обработчика ashx по умолчанию. Я хотел бы фактически передать настоящее имя.
Я попытался добавить информацию заголовка следующим образом:
context.Response.AddHeader("content-disposition", "attachment; filename=" + fileInfo.Name);
И он работает, но я не хочу, чтобы пользователю приходилось выбирать между open и save, я хочу, чтобы файл нормально открывался, и если пользователь решает сохранить его, тогда диалог даст ему/ей имя файла по умолчанию.
Я также попробовал:
context.Response.AddHeader("content-disposition", "inline; filename=" + fileInfo.Name);
Или просто, как Скотт Гензельман предложил в своем блоге.
context.Response.AddHeader("content-disposition", "filename=" + fileInfo.Name);
Никто из них не работает для меня. Кто-нибудь есть идеи?
См. тестовые примеры http://greenbytes.de/tech/tc2231/#inlwithasciifilenamepdf - кажется, что это просто недостающая функция в IE.
В случае INLINE кажется, что Internet explorer использует последний параметр в URL для создания имени файла. Например, если ваш url http://doc.com/131231231 IE предложит вам сохранить файл как 131231231.pdf Если вам нужно имя файла, например foo_131231231.pdf вы можете взломать IE, используя этот URL: http://doc.com/foo_131231231 Возможно, вам придется немного изменить свое приложение, чтобы ожидать такой уродливый параметр, но в конце вашего приложения будет работать так, как вы ожидаете.
Я также столкнулся с этой проблемой.
То, что помогло мне, было также установить для contenttype значение application/pdf
(вместо application/x-pdf
, который устарел)
response.setContentType("application/pdf");
response.setHeader("Content-disposition", "inline; filename=\"Report.pdf\"");