2014-01-24 5 views
7

Как настроить загрузку файлов в приложении с одной страницей без перезагрузки?Загрузка файлов в SPA

У меня была ситуация, когда на сервере генерируется файл PDF, который необходимо предоставить клиенту для загрузки. Отправка его в виде приложения/октетного потока ничего не помогает в SPA, потому что files can't be sent over AJAX.

Лучшее, что я придумал, это сохранение сгенерированного файла во временной папке на сервере, отправка URL-адреса файла клиенту и выполнение window.open(url). Проблема в том, что разные браузеры открывают файлы по-разному. Firefox, например, по умолчанию открывает PDF-файлы на одной вкладке, используя их PDF.js, нарушая всю идею SPA. Но выполнение window.open(url, '_blank') часто запускает блокировщики всплывающих окон и т. Д. Другие типы файлов могут привести к тому, что Бог знает, что ...

Есть ли кросс-браузерный, безопасный общий метод для загрузки файлов в SPA?

+0

делает окно.open (url, '_new') имеет тот же эффект –

ответ

4

В приложении SPA Я написал некоторое время назад, что window.location.href = '...' сделал трюк и работал правильно для большинства браузеров, но заголовок contentType и content-disposition загружаемой страницы имеет большое значение. если браузер может распознать файл как тип, который будет загружен, то вероятность того, что СПА не сломается при перенаправлении. Кроме того, просто быстрая заметка. Рамочные рамки SPA, такие как Angular, иногда позволяют использовать target='_new' и target='_self' на своих тегах, не мешая маршрутам и тому подобному.

+0

Да, это трюк. Спасибо;) – Sljux

+0

Тем не менее, это не устраняет необходимость создания временных файлов на сервере, но это не должно быть большой проблемой. – Sljux

+0

Возможно, вы столкнетесь с непоследовательным поведением браузеров в результате использования плагинов браузера, которые сложнее преодолеть. Вы также можете получить противоречивое поведение браузеров в том, как они относятся к заголовкам ответов. Я бы подумал, что если данные ответа с сервера будут точно такими же, как при создании временного файла, поведение должно быть одной и той же клиентской стороной, но это не будет чем-то вроде рамки SPA, а не как обработка файлов на стороне сервера. –

Смежные вопросы