Обработка ASP.NET MVC FileResult, возвращенного при вызове (jQuery) Ajax - PullRequest
8 голосов
/ 17 мая 2011

Цель:
Я хочу, чтобы мои пользователи загружали файл на мою веб-страницу. Я хочу, чтобы новое окно открылось и файл был либо отображен, либо загружен туда.

Моя реализация:
Однако этот файл сначала должен быть сгенерирован на стороне сервера, что может занять некоторое время. Когда пользователь нажимает кнопку, чтобы загрузить файл, я выполняю ajax-вызов и показываю анимацию ожидания, пока не получу ответ. Действие контроллера, которое обрабатывает вызов, сгенерирует файл (PDF) и вернет FileResult. Теперь в функции succes моего обратного вызова ajax в javascript я получаю данные файла.

Проблема: Я понятия не имею, что я должен делать с этими данными, чтобы передать их пользователю.

Обход:
Прямо сейчас я использую обходной путь, при котором я не возвращаю файл в вызове ajax, но сохраняю его в сеансе. В функции succes я делаю window.open("/controller/getPDFFromSession"), который загружает файл. Однако я предпочитаю не использовать сессию для подобных вещей.

Заранее спасибо.

1 Ответ

7 голосов
/ 17 мая 2011

Проблема: я понятия не имею, что я должен делать с этими данными, чтобы передать их пользователю.

Вы не должны использовать AJAX для загрузки файлов по этой причине.,Вы можете сделать следующее:

  1. Пользователь нажимает на кнопку загрузки
  2. Используя javascript, вы показываете некоторое изображение прогресса, информирующее его, что ему придется ждать
  3. Используяjavascript, который вы генерируете и внедряете скрытый iframe в DOM с его свойством src, указывающим на действие контроллера, которое должно генерировать файл
  4. После загрузки iframe вы можете скрыть изображение прогресса
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...