Загрузите офисный документ без веб-сервера, пытающегося его отобразить - PullRequest
0 голосов
/ 01 апреля 2010

Я пытаюсь загрузить шаблон InfoPath, который размещен на SharePoint. Если я нажимаю URL в Internet Explorer, он спрашивает меня, где его сохранить, и я получаю правильный файл на моем диске. Если я попытаюсь сделать это программно с помощью WebClient или HttpWebRequest, я получу обратно HTML.

Как я могу сделать свой запрос, чтобы веб-сервер возвращал фактический файл xsn и не пытался отобразить его в html. Если Internet Explorer может сделать это, то логично подумать, что я тоже могу.

Я пытался установить свойство Accept запроса на application / x-microsoft-InfoPathFormTemplate, но это не помогло. Это был выстрел в темноте.

Ответы [ 4 ]

1 голос
/ 01 апреля 2010

Я бы предложил использовать Fiddler или WireShark , чтобы точно узнать, как IE отправляет запрос, а затем дублирует его.

0 голосов
/ 01 апреля 2010

Существует заголовок ответа HTTP, который заставляет агента пользователя HTTP загружать файл вместо того, чтобы пытаться его отобразить:

Content-Disposition: attachment; filename=paper.doc

Я понимаю, что у вас может не быть доступа к серверу, но это один простой способ сделать это, если вы можете получить доступ к серверным сценариям.

См. Спецификацию HTTP / 1.1 и / или, скажем, Google, для более подробной информации о заголовке.

0 голосов
/ 01 апреля 2010

Это vb.net, но вы должны понять. Я сделал это со страницей .aspx, в которую вы передаете имя файла, затем возвращаете тип содержимого файла и добавляете заголовок, чтобы сделать его вложением, что побуждает браузер обрабатывать его как таковой.

Response.AddHeader("Content-Disposition", "attachment;filename=filename.xsn")
Response.ContentType = "application/x-microsoft-InfoPathFormTemplate"
Response.WriteFile(FilePath)  ''//Where FilePath is... the path to your file ;)
Response.Flush()
Response.End()
0 голосов
/ 01 апреля 2010

Вы пытались подменить Internet Explorer User-Agent?

...