Comment faire pour télécharger un fichier sans l'aide de <a> élément avec le téléchargement de l'attribut ou un serveur?
Selon caniuse la télécharger
attribut de <a>
élément est pris en charge à Microsoft Arête 10547+, mais pas IE ou Safari.
Comment télécharger un fichier à un objet sans utiliser <a>
élément avec download
attribut ou un serveur?
- Vous pouvez le vérifier ma réponse ici: stackoverflow.com/questions/38524320/... Il donne exactement ce que vous cherchez.
- Voir les critères de OP,
.responseType
n'a pas été défini à ce point dans le navigateur de développement. - vous êtes à la recherche d'une solution pour 2016-navigateur compatible ou 2017? 🙂
- Ne va pas essayer de modifier le contexte de la Question d'origine après le fait. Voir Comment faire pour créer un ArrayBuffer et les données de l'URI de la Goutte et des objets de Fichiers sans FileReader? où posté une Réponse qui ne répondent pas à des critères d'origine, bien que prévue solution, Kaiido précisément souligné le contexte approprié.
- Que voulez-vous dire sans un "serveur"?
- Sans demander le fichier à partir d'un serveur et sans serveur de répondre avec les données ayant
Content-Disposition
en-tête. En utilisant le navigateur à proposer le téléchargement - Quel sera le contenu du fichier. Mieux si vous pouvez d'état de toute l'histoire! En attendant, vous pouvez essayer developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
- Voir "Mieux si vous pouvez d'état de toute l'histoire!" Voir stackoverflow.com/questions/38193605/..., stackoverflow.com/q/38195855
Vous devez vous connecter pour publier un commentaire.
Il y a un certain nombre de façons de déclencher un téléchargement. Voici quelques-uns:
Utiliser un formulaire:
L'utilisation de javascript:
Bien que je soutiens @LeoFarmer réponse, je voudrais vous proposer deux "hackable" approches:
Si le fichier est très petite, vous pouvez utiliser
a
avec lehref='data:[<mediatype>][;base64],<données>'
.Cela pourrait vous permettre d'ajouter le contenu de la disposition dans le
mediatype
, l'émulation d'un en-tête HTTP. Ce hack n'est pas aussi portable que l'on pourrait espérer.Sur les petites et moyennes fichiers, il est possible de télécharger le fichier à l'aide d'AJAX, et puis utiliser le Fichier Javascript de l'API pour la demande d'enregistrement de fichier (l'API ne les supporte pas d'économie, mais il est facile de convertir les données à des données d'URL).
Si vous voulez éviter que le Fichier Javascript de l'API, vous pouvez essayer d'émuler un ancrage sur, comme suggéré ici.
De nouveau, comme l'a souligné Leo Agriculteur, ces solutions ne peux pas promettre que le navigateur n'est pas ouvert le fichier dans un nouvel onglet au lieu de l'enregistrer sur le disque, mais je pense qu'il est sûr de dire que tous les utilisateurs seront en mesure de dégrader gracieusement à un
cmd+S
ouctrl+S
raccourci clavier 🙂Vous pouvez le faire en utilisant à la fois le téléchargement de l'attribut et de jquery. télécharger attribut ne prennent pas en charge dans ie et safari/ios. Donc vous pouvez utiliser jquery pour faire
Il prend en charge tous les navigateurs courants.
Simplement inclure:
et de l'utiliser comme:
Remarque:
Pour le faire fonctionner aussi dans Safari < 6, Opera < 15 et FireFox < 20 vous devez inclure Blob.js comme une dépendance.
File
constructeur disponible sur les navigateurs mentionnés à la dernière phrase de la Réponse?Vous pouvez utiliser
données > URI
data:[<mediatype>][;base64],<data>
représentation de fichier soit créé manuellement ou en utilisantFileReader()
,.readAsDataURL()
, avecMIME
le type d'ensemble deapplication/octet-stream
,encodeURIComponent()
,window.open()
plnkr http://plnkr.co/edit/IS1OC0laRwL3BuuF9zay?p=preview
Si vous utilisez le serveur-côté puis de suivre le mécanisme de soumission de formulaire pour afficher la page.
Dans MVC, nous pouvons utiliser code ci-dessous
Html
MVC Contrôleur de
<a>
élément avec le téléchargement de l'attribut ou un serveur?"<form>
n'a pas besoin d'être soumis à un serveur. L'exigence de la Question est de ne pas utiliser un serveur