Então … estou tentando resolver um problema relacionado a download de arquivos.
Uso Spring (com Security) no backend. Uso JQuey no Front.
Ocorre que na resposta (no Front) está falhando a recuperação do cabeçalho “Content-Disposition” (jqXHR.getResponseHeader(“Content-Disposition”) é igual a null). É importante acessar esse cabeçalho para que eu possa recuperar o nome do arquivo (é uma imagem).
O estranho é que se observar os cabeçalhos da resposta HTTP por meio do console de depuração do browser o “Content-Disposition” está lá (inclusive a imagem aparece). Mesmo assim, a lógica no meu código não consegue acessar o cabeçalho.
agora crie um variável local no seu metódo, dentro de success, estou abstraindo que o seu promisse retorna com sucesso da requisição realizada, atribua o valor do atributo ao qual deseja do header a essa variável criada.
Exemplo:
var contentDisposition = headers("Content-Disposition");
debug e veja o valor de **contentDisposition**
Cara … valeu aí pela dica. Mas fiz como vc recomendou … e agora quanto faço headers()[‘Content-disposition’] ou headers()[‘Content-Type’] vem null para ambos. antes era null apenas para Disposition. Bom, tou estudando … se estiver fazendo errado … ficarei grato pela correção.
fiz assim como vc sugere e nada … continua tudo na mesma. na verdade o erro que dah ao usar headers(“Content-Disposition”) é que headers nao eh uma funcao. de fato, é um objeto.
Tenta fazer novamente com headers() mas com javascript mesmo, sem jquery.
function seuMetodo(){
return downloadService().success(function(data, status, headers) {
//coloque um breakpoint na linha abaixo
var contentDisposition = headers("Content-Disposition");
}).error(function(data, status) {
$log.error('Erro na requisição: ' + status + ' dados: ' + JSON.stringify(data));
});
};
function downloadService() {
return $http.get(backend + '/noauthe/filemngr/Download/');
};
outro jeito é força uma requisição sincrona com AJAX nativo sem Jquery, para você testar também. você pode colocar o código abaixo como assincrono também se assim desejar, mas para ser mais rápido vamos deixar isso de lado é forçar sincrono.
function download(nomeImagem){
var URL = backend + '/noauthe/filemngr/Download/';
var http = new XMLHttpRequest();
http.open('GET', URL, false);
http.send();
if(http.status != 200 && http.status == 404){
//sucesso
}else{
//erro na requisição
}
return URL;
}