This commit is contained in:
2025-10-28 11:34:30 -03:00
+46 -2
View File
@@ -249,23 +249,67 @@ class AgentService {
}
try {
console.log('Iniciando download:', { fileUrl, fileName });
// Tenta primeiro fazer o download via fetch (funciona se CORS estiver configurado)
try {
const response = await fetch(fileUrl, {
method: 'GET',
mode: 'cors',
cache: 'no-cache',
});
if (!response.ok) {
throw new Error(`Erro HTTP: ${response.status}`);
}
// Converte a resposta em blob
const blob = await response.blob();
// Cria uma URL temporária para o blob
const blobUrl = URL.createObjectURL(blob);
// Cria um elemento <a> temporário para forçar o download
const link = document.createElement('a');
link.href = blobUrl;
link.download = fileName;
document.body.appendChild(link);
link.click();
// Remove o elemento e libera a URL temporária
document.body.removeChild(link);
URL.revokeObjectURL(blobUrl);
console.log('Download via fetch concluído:', { fileUrl, fileName });
return;
} catch (fetchError: any) {
console.warn('Erro no download via fetch, tentando método alternativo:', fetchError.message);
// Se falhar (erro de CORS), usa o método alternativo de abrir em nova aba
// Isso permite que o navegador force o download mesmo com restrições de CORS
const link = document.createElement('a');
link.href = fileUrl;
link.download = fileName;
link.target = '_blank';
link.rel = 'noopener noreferrer';
// Para S3, podemos tentar adicionar parâmetros que forçam o download
const url = new URL(fileUrl);
url.searchParams.set('response-content-disposition', `attachment; filename="${encodeURIComponent(fileName)}"`);
link.href = url.toString();
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
console.log('Download iniciado:', { fileUrl, fileName });
console.log('Download via link direto iniciado:', { fileUrl, fileName });
}
} catch (error: any) {
console.error('Erro ao fazer download:', error);
throw {
success: false,
message: error.message || 'Erro ao fazer download do arquivo',
message: error.message || 'Erro ao fazer download do arquivo. Verifique se a URL está acessível.',
};
}
}