Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Download de PDF via AngularJS

Existe alguma maneira recomendada para executar download de arquivos pelo AngularJS?

Por exemplo, abaixo um código simples que recebe um arquivo PDF e executa o download. Porém a única solução que eu achei é criar um link invisível na tela e executar um click no mesmo. Não achei muito prática essa solução, e gostaria de saber se o AngularJS possui alguma solução mais elegante para isso.

Grato!

Rest:

    @GET
    @Path("/url")
    @Produces("application/pdf")
    public Response getPDF() {

        byte[] byteArray = servico.getPDF();

        ResponseBuilder builder = Response.status(Status.OK)
                .entity(byteArray)
                .type("application/pdf");

        return builder.build();
    }

AngularJS:

    $scope.pdf= function () {

        $http.get('/url', {responseType: 'arraybuffer'})
        .success(function(data) {

            var file = data;
            // TRECHO QUE EXECUTA O DOWNLOAD
            var fileName = "teste.pdf";
            var a = document.createElement("a");
            document.body.appendChild(a);
            a.style = "display: none";
            var fileURL = window.URL.createObjectURL(file);
            a.href = fileURL;
            a.download = fileName;
            a.click();

        })
        .error(function(erro) {
            console.log(erro);                    
        });
    };
1 resposta
solução!

Uma solução mais elegante seria criar uma diretiva. Aqui tem um exemplo

https://codepen.io/bachly/pen/yeRmmL

Aqui tem outro exemplo, mas é parecido com o seu código

http://jaliyaudagedara.blogspot.com/2016/05/angularjs-download-files-by-sending.html

Caso você queira, ao invés de fazer o download, abrir o arquivo para visualizar, poderia tentar isso aqui:

https://github.com/winkerVSbecks/angular-pdf-viewer
https://codepen.io/lumi/pen/tnusy/