2015-11-02 3 views
0

Мне нужно скачать файл с сервера. Файл хранится в базе данных. У меня есть контроллер cs, который возвращает файл обратно в пользовательский интерфейс. Вызов сервера GET выглядит следующим образом:Загрузить файл в Angular Environment

http://server/api/controllername/fileid/data 

Это делает работу, когда я запускаю эту ссылку в браузере - файл идет вниз и переходит в область загрузки (Chrome). Но когда я отправляю ту же команду из своего кода Angualar, я не вижу никакого файла. Консоль сообщает, что мой запрос был успешным (код 200), но я просто ничего не вижу. Пожалуйста, дайте мне знать, какие фрагменты кода для публикации, чтобы облегчить вам помощь.

Благодаря

+2

Не запрашивать его с HTTP, вместо того, чтобы просить его, как если бы вы уезжали страницу, чтобы посетить этот URL, либо в текущей вкладке или новую вкладку или даже iframe. –

+0

Если вы отправляете запрос AJAX, вы в основном говорите браузеру: я хочу обработать ответ этого запроса так, как я хочу, с кодом JavaScript. Почему вы отправляете запрос AJAX, а не просто позволяете пользователю нажимать на регулярную ссылку? –

+0

Каковы данные? JSON, XML или это фрагмент страницы (HTML)? – Chris

ответ

1

Создайте ссылку на ресурс и не обрабатывайте его с помощью ajax.

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

1

Попробуйте этот код:

var a = document.createElement('a'); 
a.href = "http://server/api/controllername/fileid/data"; 
a.click(); 

Вы можете составить адрес конкатенации переменных и текст.

+2

Почему бы просто не использовать 'window.location = 'http: // server/api/controllername/fileid/data''? –

+0

Я использую этот код на веб-странице, которая создает XML-файл и позволяет вам сохранять его локально. Если я использую ваше предложение, мой браузер (хром) показывает файл XML, когда я использую тот, который я описал выше, он автоматически загрузит файл. Я не знаю, может ли это повлиять на другие типы файлов или mime. –

1

Файл, вероятно, правильно загружен в качестве байта [] для его вызова, но это было бы бесполезно для пользователя - как и моя проблема.

В моем случае мне нужно было скачать файл со сложным набором параметров. В этом примере JavaScript использует почтовый запрос и создает форму (и публикует ее) с любым объектом JavaScript, который вы ему даете. Этот код может помочь, если вы упростил:

private open(verb, url, data, target) 
 
    { 
 
     var form = document.createElement("form"); 
 
     form.action = url; 
 
     form.method = verb; 
 
     form.target = target || "_self"; 
 
     if (data) { 
 
      this.createFormParameters(form, "", data); 
 
     } 
 

 
     form.style.display = 'none'; 
 
     document.body.appendChild(form); 
 
     form.submit(); 
 
    } 
 

 

 
    private createFormParameters(form, key, value) { 
 
     // recursive algorithm to add parameters (including objects and arrays of objects) to a custom form 
 

 
     if (typeof value === "object") { 
 
      for (var item in value) { 
 

 
       if (Array.isArray(value[item])) { 
 
        for (var arrayItem in value[item]) { 
 
         this.createFormParameters(form, (item + "[" + arrayItem + "]."), value[item][arrayItem]); 
 
        } 
 
        continue; 
 
       } 
 

 
       var input = document.createElement("textarea"); 
 
       input.name = key + item; 
 
       input.value = value[item]; 
 
       form.appendChild(input); 
 
      } 
 
     } 
 
     else 
 
     { 
 
      var input = document.createElement("textarea"); 
 
      input.name = key; 
 
      input.value = value; 
 
      form.appendChild(input); 
 
     } 
 
    }

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