Le piège du type Blob en JavaScript (Ligne critique 111)
Dans ton code, après avoir récupéré le fichier, tu tentes de reconstruire un fichier binaire avec cette ligne :
JavaScript
const blob = new Blob([this.response], { type: 'application/octet-stream' });
Puisqu’il s’agit d’une image JPG, forcer un type application/octet-stream directement dans la création du Blob JavaScript peut pousser le navigateur (ou les sécurités du serveur mutualisé lors de l’échange) à rejeter le traitement du flux.
Comment corriger ton code JavaScript ?
Il est préférable de laisser le Blob utiliser le type MIME natif renvoyé par le serveur. Remplace ton bloc xhr.onload (à partir de la ligne 110) par cette version nettoyée :
JavaScript
xhr.onload = async function() {
if (this.status === 200) {
// Correction ici : On prend directement la réponse sans forcer le type binaire
const blob = this.response;
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
// Calculer le hash SHA-256 du fichier téléchargé
const fileHash = await calculateBlobHash(blob);
statusElement.textContent = `Téléchargement terminé! Hash: ${fileHash}`;
// Comparer les hashs
if (fileHash === expectedHash) {
statusElement.textContent += " - Vérification réussie: Les hashs correspondent.";
logDownload(filename, 'success');
} else {
statusElement.textContent += " - Erreur: Les hashs ne correspondent pas!";
logDownload(filename, 'hash_mismatch');
}
} else {
statusElement.textContent = 'Erreur lors du téléchargement (Code ' + this.status + ') !';
logDownload(filename, 'failed');
}
// Masquer l'icône de chargement et le bouton Stop
progressContainer.style.display = 'none';
spinner.style.display = 'none';
stopBtn.style.display = 'none';
};
