Méthodes pour implémenter la fonction de téléchargement en JavaScript : 1. Téléchargez via la balise a ; 2. Téléchargez via la méthode "window.open" ; 3. Téléchargez via la méthode "location.href" ; 4. Téléchargez via le transfert de fichier ; Fonction de l’objet blob.
L'environnement d'exploitation de ce tutoriel : système Windows 10, javascript version 1.8.5, ordinateur Dell G3.
Comment implémenter la fonction de téléchargement en javascript ?
js implémente la fonction de téléchargement de fichiers
1. un téléchargement de balise
<body> <button onClick="download()">a标签下载</button> <script> function download(url = 'http:www.xxx.com/download?name=file.pdf', fileName = '未知文件') { const a = document.createElement('a'); a.style.display = 'none'; a.setAttribute('target', '_blank'); /* * download的属性是HTML5新增的属性 * href属性的地址必须是非跨域的地址,如果引用的是第三方的网站或者说是前后端分离的项目(调用后台的接口),这时download就会不起作用。 * 此时,如果是下载浏览器无法解析的文件,例如.exe,.xlsx..那么浏览器会自动下载,但是如果使用浏览器可以解析的文件,比如.txt,.png,.pdf....浏览器就会采取预览模式 * 所以,对于.txt,.png,.pdf等的预览功能我们就可以直接不设置download属性(前提是后端响应头的Content-Type: application/octet-stream,如果为application/pdf浏览器则会判断文件为 pdf ,自动执行预览的策略) */ fileName && a.setAttribute('download', fileName); a.href = url; document.body.appendChild(a); a.click(); document.body.removeChild(a); } </script> </body>
Avantages :
Vous pouvez télécharger directement des fichiers txt, png, pdf, exe, xlsx et d'autres types de fichiers
Inconvénients :
une balise ne peut recevoir que des requêtes, l'URL a donc une limite de longueur
Impossible d'obtenir la progression du téléchargement
Restrictions inter-domaines
Impossible de transporter un jeton dans l'en-tête pour l'opération d'authentification
Impossible de déterminer l'interface Est-ce réussi
Problème de compatibilité IE
2. window.open download
<body> <button onclick="download('http://www.xxx.com/download?name=file.pdf')">window.open下载</button> <script> function download(url) { window.open(url, '_self'); /** * _blank:在新窗口显示目标网页 * _self:在当前窗口显示目标网页 * _top:框架网页中在上部窗口中显示目标网页 /** } </script> </body>
Avantages:
Simple et pratique
Inconvénient âges :
Il y aura des problèmes de limite de longueur d'URL
Il faut faire attention au problème d'encodage de l'URL
Impossible d'obtenir la progression du téléchargement
Impossible de transporter le jeton dans l'en-tête pour l'opération d'authentification
Impossible de déterminer si l'interface réussit
Impossible de télécharger directement les fichiers qui peuvent être prévisualisés directement par le navigateur Tapez (txt, png, pdf seront prévisualisés directement)
3. téléchargement location.href
<body> <button onclick="download('http://www.xxx.com/download?name=file.pdf')">location.href下载 </button> <script> function download(url) { window.location.href = url; } </script> </body>
Avantages
Simple, pratique et direct
Peut télécharger des fichiers volumineux (G ou supérieur)
Inconvénients
Il y aura un problème de limite de longueur d'URL
Vous devez faire attention à l'encodage de l'URL problème
Impossible d'obtenir la progression du téléchargement
Impossible de transporter le jeton dans l'en-tête pour l'opération d'authentification
Impossible de télécharger directement avec le navigateur Types de fichiers prévisualisés directement (txt, png et pdf seront prévisualisés directement)
Il est impossible de juger si l'interface revient avec succès
Trois. Téléchargement d'objet blob de transfert de fichiers
<button onclick="download()">文件流转blob对象下载</button> <script> download() { axios({ url: 'http://www.xxx.com/download', method: 'get', responseType: 'blob', }).then(res => { const fileName = res.headers.content-disposition.split(';')[1].split('filename=')[1]; const filestream = res.data; // 返回的文件流 // {type: 'application/vnd.ms-excel'}指定对应文件类型为.XLS (.XLS的缩写就为application/vnd.ms-excel) const blob = new Blob([filestream], {type: 'application/vnd.ms-excel'}); const a = document.createElement('a'); const href = window.URL.createObjectURL(blob); // 创建下载连接 a.href = href; a.download = decodeURL(fileName ); document.body.appendChild(a); a.click(); document.body.removeChild(a); // 下载完移除元素 window.URL.revokeObjectURL(href); // 释放掉blob对象 }) } </script>
Avantages :
Peut télécharger des fichiers txt, png, pdf et d'autres types de fichiers
Vous pouvez porter le jeton dans l'en-tête pour les opérations d'authentification
Vous pouvez obtenir la progression du téléchargement du fichier
Vous pouvez juger si l'interface revient avec succès
Inconvénients :
Problème de compatibilité, ce n'est pas le cas disponible sous IE10. Veuillez faire attention au navigateur Safari. Le site officiel indique que Safari a un problème sérieux avec les blobs de type application/octet-stream
Le flux de fichiers renvoyé par le backend ne sera obtenu qu'avant le téléchargement.
Apprentissage recommandé : "Tutoriel vidéo JavaScript"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!