2015-01-21 3 views
0

У меня есть сервер с аутентификацией на основе заголовка, и я хочу загрузить из него файл. С проверкой подлинности на основе файлов cookie это просто: вы визуализируете ссылку на файл в <a href...> и позволяете браузеру обрабатывать остальные.

У меня есть этот код:

$http.get(url).then(function (response) { 
     // do something 
    }, function (response) { 
     alert("ERROR"); 
    }); 

У меня есть инъекции HTTP заголовков, поэтому в этом случае $http.get будет заселить их для нас. То, что я хочу сделать, это передать этот ответ $window, поэтому с точки зрения пользователя он будет похож на обычную загрузку файла.

Есть ли способ сделать это? Любые другие варианты приветствуются.

+1

Если установить заголовки правильно, вы можете просто установить 'window.location' (если используется GET) или использовать обычную форму для POST вместо использования ajax. – Pointy

+0

@Pointy делает «очень хороший аргумент», я просто хотел бы добавить/напомнить вам использовать '$ location' или хотя бы' $ window.location', а не просто 'window.location' – Brocco

+0

@Brocco Я не посмотреть, как/почему это имеет значение; после того, как инициирован запрос HTTP и предполагается, что заголовок 'Content-Disposition' установлен, тогда ни одно из клиентских программ не будет иметь никакой идеи, что это даже происходит. – Pointy

ответ

0

Я предполагаю, что вы хотите, чтобы файл был перенесен на клиент, без необходимости нажимать на него что-либо еще на странице. Вы можете заставить это произойти без необходимости возиться с $ window.

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

var downloader = angular.element('<a>download</a>'); 
downloader.attr('href', "data:application/zip;base64," + content); 
downloader.attr('download', 'my.zip') 

var ev = $document[0].createEvent("MouseEvent"); 
ev.initMouseEvent(
    "click", 
    true /* bubble */, true /* cancelable */, 
    window, null, 
    0, 0, 0, 0, /* coordinates */ 
    false, false, false, false, /* modifier keys */ 
    0 /*left*/, null 
); 
downloader[0].dispatchEvent(ev); 
+0

будет, это решение выглядит грязным взломом. Я искал что-то более элегантное. –

+0

Возможно, я что-то пропустил, но если вы пытаетесь передать данные пользователю, которого вы уже загрузили в приложение, это ваш лучший выбор. Это хаки, потому что то, что вы делаете, хакерское. Единственный способ загрузить файл на клиенте - это запросить его посредством действия click. Если вы не хотите, чтобы пользователь нажимал что-то, вам нужно щелкнуть по нему. – Enzey

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