Da forma vc vc está fazendo, funcionaria se vc estivesse retornando o arquivo sem ser na base64.
G
guilhermebhte
Como teria que retornar ?
L
Lucas_Camara
Retorna os bytes do arquivo apenas. Mas como base64 tb funciona, soh que vc teria que fazer uma conversão (conforme o link que mandei - tem a ver com a função atob).
G
guilhermebhte
Retorna uma arquivo corrompida.
Este é a classe que retorna com as informações do arquivo
@PostMapping(value="incluir")@PreAuthorize("hasAuthority('"+ADMINISTRADOR+"') ")publicResponseEntity<?>incluir(@Valid@RequestPartOrcamentoIncluirDTOdto,@RequestPartCollection<MultipartFile>files){try{log.info("Metodo que inclui um orcamento");OrcamentoDTOorcamento=service.incluir(dto,files);log.info("Com o id: "+orcamento.getId());orcamento.setMensagem(mensagemSalvar(false));returnnewResponseEntity<>(orcamento,OK);}catch(Exceptione){log.error(e.getMessage(),e);thrownewBadRequestAlertException(e.getMessage(),ORCAMENTO,null);}}
Serviço
privateCollection<OrcamentoAnexo>ajustesAnexos(Collection<MultipartFile>anexos,Orcamentoorcamento){log.info("Metodoquefazajustesemanexosparaoorçamento");Collection<OrcamentoAnexo>anexosBanco=newArrayList<>();if(anexos!=null&&!anexos.isEmpty()){anexos.forEach(anexo->{OrcamentoAnexoanexoBanco;try{anexoBanco=OrcamentoAnexo.builder().tamanho(anexo.getSize()).arquivo(anexo.getBytes()).nome(anexo.getOriginalFilename()).orcamento(orcamento).contentType(anexo.getContentType()).build();anexosBanco.add(anexoBanco);aplicacaoAuditoria(anexoBanco);}catch(IOExceptione){log.error(e.getMessage(),e);}});log.info("Total de anexos: "+anexos.size());}returnanexosBanco;}
No Java a não ser o anexo.getBytes(), o restante está chegando correto.
G
guilhermebhte
No angular alterei e ficou assim:
download(idArquivo:number,tipo:string):void{this.arquivosService.downloadArquivoOrcamento(idArquivo).subscribe((data:any)=>{constblob=newBlob([data.arquivo],{type:tipo});constfileName=data.nome;if(navigator.msSaveBlob){//IE10+navigator.msSaveBlob(blob,fileName);}else{constlink=document.createElement('a');//BrowsersthatsupportHTML5downloadattributeif(link.download!==undefined){consturl=URL.createObjectURL(blob);link.setAttribute('href',url);link.setAttribute('download',fileName);link.style.visibility='hidden';document.body.appendChild(link);link.click();document.body.removeChild(link);}}},err=>{alert("Problem while downloading the file.");console.error(err);})}
L
Solucao aceita
Lucas_Camara1 like
Essa é uma classe que uso para fazer download de base64: