Last active
November 30, 2016 18:20
-
-
Save fabiogoll/ff02783e44d3235cc7a66c040281c497 to your computer and use it in GitHub Desktop.
Forçar download via ajax com saveblob ou link de acordo com o navegador
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var URL = window.URL || window.webkitURL || window.mozURL || window.msURL; | |
var saveBlob = navigator.saveBlob || navigator.webkitSaveBlob || navigator.mozSaveBlob; | |
var downloadComSaveBlob = function (blob, nome) { | |
try { | |
$log.info('-- Tentando realizar o download com o método saveBlob --'); | |
if (navigator.msSaveBlob) { | |
navigator.msSaveBlob(blob, nome); | |
} else if (saveBlob) { | |
saveBlob(blob, nome); | |
} else { | |
throw new Error('-- Este browser não suporta o método saveBlob --'); | |
} | |
return true; | |
} catch (ex) { | |
$log.error(ex); | |
return false; | |
} | |
}; | |
var downloadComLink = function (url, nome) { | |
var link = document.createElement('a'); | |
if ('download' in link) { | |
try { | |
$log.info('-- Tentando realizar o download simulando um click em um link --'); | |
link.setAttribute('href', url); | |
link.setAttribute('download', nome); | |
var event = new MouseEvent('click'); | |
link.dispatchEvent(event); | |
return true; | |
} catch (e) { | |
$log.error(e.name); | |
$log.error(e.message); | |
return false; | |
} | |
} else { | |
return false; | |
} | |
}; | |
/** | |
* SALVA ARQUIVOS OBITIDOS VIA REQUISIÇÕES HTTP A API | |
* @param data | |
* @param headers | |
*/ | |
this.salvarArquivo = function salvarArquivo (data, headers) { | |
var cabecahos = headers(); | |
// PEGA O NOME DO ARQUIVO | |
var pos1 = cabecahos['content-disposition'].indexOf('"') + 1; | |
var pos2 = cabecahos['content-disposition'].length - 1; | |
var nome = cabecahos['content-disposition'].substring(pos1, pos2); | |
// DETERMINA O TIPO DE CONTEÚDO | |
var contentType = cabecahos['content-type']; | |
// TENTA CRIAR UM BLOB | |
try { | |
if (URL) { | |
$log.info('-- Criando blob.. --'); | |
blob = new Blob([data], {type: contentType}); | |
url = URL.createObjectURL(blob); | |
} | |
} catch (erro) { | |
$log.error('-- Erro ao tentar criar um blob --'); | |
$log.error(e); | |
} | |
// TENTA REALIZAR O DOWNLOAD UTILIZANDO O MÉTODO SAVEBLOB | |
if (blob) { | |
if (downloadComSaveBlob(blob, nome)) { | |
return true; | |
} | |
} | |
// TENTA REALIZAR O DOWNLOAD UTILIZANDO UM DOWNLOAD LINK | |
if (url) { | |
if (downloadComLink(url, nome)) { | |
return true; | |
} | |
} | |
// FALLBACK PARA ABRIR O CONTEÚDO EM NOVA ABA | |
if (url) { | |
try { | |
$log.info('-- Tentando realizar o download com window.location --'); | |
window.location.assign(url); | |
return true; | |
} catch (e) { | |
$log.error(e.name); | |
$log.error(e.message); | |
} | |
} | |
$log.info('-- Nenhum método para salvar o arraybuffer obteve sucesso --'); | |
return false; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment