Загрузка файла Excel с использованием MS Edge - PullRequest
0 голосов
/ 02 июля 2018

Мое приложение создает файл Excel на стороне сервера из базы данных.

Почтовый запрос отправляет параметры на сервер, который сервер затем использует для запроса к базе данных.

Сервер использует эти параметры для извлечения данных, преобразует данные в файл Excel (xlsx), затем сохраняет файл с определенным именем файла в соответствии с параметрами, отправленными на сервер.

Сервер отвечает на запрос публикации, отправляя имя файла в браузер.

Затем браузер создает ссылку, используя имя файла и другие предварительно определенные параметры, чтобы загрузить файл, следуя инструкциям:

var link = 'http://host-name/path-to-file/excel-file.xlxs'; // the link that is created by the js in the browser
window.location = link; // the file is downloaded

Это работает в Chrome, Firefox, Opera и Safari, в этих браузерах загрузка файлов не вызывает проблем.

Тем не менее, при запуске в Microsoft-edge файл не загружается, и это отображается на странице.

enter image description here

Ответы [ 2 ]

0 голосов
/ 11 августа 2018

Проблема здесь в том, что этот метод загрузки файлов на самом деле не скачивает файл. Я использовал javascript, чтобы указать browser, чтобы открыть файл excel, window.location = link;. Что говорит browser, перейдите по этой ссылке и откройте все, что вы найдете по этому адресу. Обычно это файл HTML или что-то еще transpiled в HTML. В некоторых случаях это также может быть .pdf или файл, который современные web-browsers могут интерпретировать и запускать.

Так вот, причина, по которой это в основном работало; Браузеры, такие как chrome и firefox, достаточно умны, чтобы понимать, что они не могут интерпретировать и отображать файлы excel, поэтому вместо этого они загружают их. Довольно умно, верно. Тем не мение; microsoft-edge не такой умный, как его более проверенные соотечественники. Он пытается интерпретировать и запустить файл, что, конечно, не может. К чему это тогда приводит; это грандиозное проявление глупости; как вы можете видеть из скриншота в моем вопросе выше.

Моя проблема здесь была на самом деле более глубокая проблема несовпадения технологий. С тех пор я перешел на использование более современного стека, заменив мой простой node.js сервер на express. Перемещение front-end из модели сервера приложений java-контейнера cross-origin tomcat (которая вызывала большинство моих головных болей ежедневно с тех пор, как я кодировал javascript), в среду same-origin с использованием webpack вместе с express.

И, как вы, возможно, знаете, использование webpack приносит совершенно новое измерение в front-end, которое не было доступно раньше, когда мы использовали «старый подход» к web-dev.

Большинство улучшений в использовании webpack появилось благодаря его способности выводить 'node.js' на передний конец.

Это сделало мою жизнь разработчика на 150% проще, и проблема, описанная в моем вопросе выше, теперь ушла в прошлое. javascript за победу! Мораль для меня здесь в том, что иногда это не быстрое решение, и вам просто нужно делать все правильно.

0 голосов
/ 03 июля 2018

Кто-то сталкивался с подобной проблемой в некоторых версиях IE и должен был установить заголовок Cache-Control, чтобы загрузка работала правильно:

response.Cache.SetCacheability(HttpCacheability.Private);

Источник

...