J'ai une exigence très similaire spécifiée ici .
J'ai besoin que le navigateur de l'utilisateur lance un téléchargement manuellement lorsque $('a#someID').click();
Mais je ne peux pas utiliser la méthode window.href
, car elle remplace le contenu de la page actuelle par le fichier que vous essayez de télécharger.
Au lieu de cela, je veux ouvrir le téléchargement dans une nouvelle fenêtre/un nouvel onglet. Comment est-ce possible?
Utilisez un <iframe>
invisible:
<iframe id="my_iframe" style="display:none;"></iframe>
<script>
function Download(url) {
document.getElementById('my_iframe').src = url;
};
</script>
Pour obliger le navigateur à télécharger un fichier qu’il serait sinon capable de restituer (HTML ou fichiers texte, par exemple), le serveur doit définir le type Type MIME du fichier avec une valeur non sensuelle, telle que application/x-please-download-me
. ou bien application/octet-stream
, qui est utilisé pour des données binaires arbitraires.
Si vous souhaitez uniquement l'ouvrir dans un nouvel onglet, la seule façon de procéder consiste pour l'utilisateur à cliquer sur un lien dont l'attribut target
est défini sur _blank
.
En jQuery:
$('a#someID').attr({target: '_blank',
href : 'http://localhost/directory/file.pdf'});
Chaque fois que ce lien est cliqué, il téléchargera le fichier dans un nouvel onglet/fenêtre.
J'ai créé le plugin jQuery File Download ( Démo ) ( GitHub ) qui pourrait également vous aider dans votre situation. Cela fonctionne assez de la même façon avec un iframe mais avec quelques fonctionnalités intéressantes que j'ai trouvées assez utiles:
Très facile à configurer avec de jolis visuels (dialogue jQuery UI, mais pas obligatoire), tout est également testé
L'utilisateur ne quitte jamais la même page à partir de laquelle il a lancé un téléchargement de fichier. Cette fonctionnalité devient cruciale pour les applications Web modernes
les fonctions successCallback et failCallback vous permettent d'être explicite sur ce que l'utilisateur voit dans l'une ou l'autre situation
En conjonction avec l'interface utilisateur de jQuery, un développeur peut facilement montrer à un modal l'informant qu'un téléchargement de fichier est en cours, le dissoudre après le début du téléchargement ou même informer l'utilisateur de manière conviviale qu'une erreur s'est produite. Voir le Démo pour un exemple. J'espère que cela aide quelqu'un!
Voici une démonstration de cas d’utilisation simple utilisant le plugin source with promises. La page demo comprend de nombreux autres exemples, «meilleurs UX».
$.fileDownload('some/file.pdf')
.done(function () { alert('File download a success!'); })
.fail(function () { alert('File download failed!'); });
function downloadURI(uri, name)
{
var link = document.createElement("a");
link.download = name;
link.href = uri;
link.click();
}
Vérifiez si votre (vos) navigateur (s) cible (s) exécutera (nt) l'extrait de code ci-dessus correctement:
http://caniuse.com/#feat=download
Je recommande d'utiliser html5 pour le téléchargement au lieu de jQuery:
<a href="your_link" download> file_name </a>
Cela téléchargera votre fichier sans l’ouvrir.
__ extrait de code __
var $idown; // Keep it outside of the function, so it's initialized once.
downloadURL : function(url) {
if ($idown) {
$idown.attr('src',url);
} else {
$idown = $('<iframe>', { id:'idown', src:url }).hide().appendTo('body');
}
},
//... How to use it:
downloadURL('http://whatever.com/file.pdf');
Fonctionne sur Chrome, Firefox et IE8 et supérieur.
var link=document.createElement('a');
document.body.appendChild(link);
link.href=url ;
link.click();
Sept ans plus tard à peine, voici une solution jQuery d’une ligne utilisant un formulaire au lieu d’un iframe ou d’un lien:
$('<form></form>')
.attr('action', filePath)
.appendTo('body').submit().remove();
J'ai testé cela dans
Si quelqu'un connaît des inconvénients avec cette solution, je serais très heureux d'en entendre parler.
Démo complète:
<html>
<head><script src="https://code.jquery.com/jquery-1.11.3.js"></script></head>
<body>
<script>
var filePath = window.Prompt("Enter a file URL","http://jqueryui.com/resources/download/jquery-ui-1.12.1.Zip");
$('<form></form>').attr('action', filePath).appendTo('body').submit().remove();
</script>
</body>
</html>
Je ne sais pas si la question est tout simplement trop ancienne, mais la définition de window.location dans une URL de téléchargement fonctionnera tant que le type mime de téléchargement est correct (par exemple, une archive Zip).
var download = function(downloadURL) {
location = downloadURL;
});
download('http://example.com/archive.Zip'); //correct usage
download('http://example.com/page.html'); //DON'T
Le code le plus complet et le plus fonctionnel (testé) pour le téléchargement de données pour Firefox, Chrome et le code IE est le suivant. Supposons que les données se trouvent dans le champ texarea qui contient id = 'textarea_area' et nomfichier est le nom du fichier où les données seront téléchargées.
function download(filename) {
if (typeof filename==='undefined') filename = ""; // default
value = document.getElementById('textarea_area').value;
filetype="text/*";
extension=filename.substring(filename.lastIndexOf("."));
for (var i = 0; i < extToMIME.length; i++) {
if (extToMIME[i][0].localeCompare(extension)==0) {
filetype=extToMIME[i][1];
break;
}
}
var pom = document.createElement('a');
pom.setAttribute('href', 'data: '+filetype+';charset=utf-8,' + '\ufeff' + encodeURIComponent(value)); // Added BOM too
pom.setAttribute('download', filename);
if (document.createEvent) {
if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) { // IE
blobObject = new Blob(['\ufeff'+value]);
window.navigator.msSaveBlob(blobObject, filename);
} else { // FF, Chrome
var event = document.createEvent('MouseEvents');
event.initEvent('click', true, true);
pom.dispatchEvent(event);
}
} else if( document.createEventObject ) { // Have No Idea
var evObj = document.createEventObject();
pom.fireEvent( 'onclick' , evObj );
} else { // For Any Case
pom.click();
}
}
et ensuite il suffit d'appeler
<a href="javascript:download();">Download</a>
Pour lancer le téléchargement.
La matrice permettant de définir le type MIME correct pour la boîte de dialogue de téléchargement PEUT ÊTRE SUIVANTE:
// ----------------------- Extensions to MIME --------- //
// List of mime types
// combination of values from Windows 7 Registry and
// from C:\Windows\System32\inetsrv\config\applicationHost.config
// some added, including .7z and .dat
var extToMIME = [
[".323", "text/h323"],
[".3g2", "video/3gpp2"],
[".3gp", "video/3gpp"],
[".3gp2", "video/3gpp2"],
[".3gpp", "video/3gpp"],
[".7z", "application/x-7z-compressed"],
[".aa", "audio/audible"],
[".AAC", "audio/aac"],
[".aaf", "application/octet-stream"],
[".aax", "audio/vnd.audible.aax"],
[".ac3", "audio/ac3"],
[".aca", "application/octet-stream"],
[".accda", "application/msaccess.addin"],
[".accdb", "application/msaccess"],
[".accdc", "application/msaccess.cab"],
[".accde", "application/msaccess"],
[".accdr", "application/msaccess.runtime"],
[".accdt", "application/msaccess"],
[".accdw", "application/msaccess.webapplication"],
[".accft", "application/msaccess.ftemplate"],
[".acx", "application/internet-property-stream"],
[".AddIn", "text/xml"],
[".ade", "application/msaccess"],
[".adobebridge", "application/x-bridge-url"],
[".adp", "application/msaccess"],
[".ADT", "audio/vnd.dlna.adts"],
[".ADTS", "audio/aac"],
[".afm", "application/octet-stream"],
[".ai", "application/postscript"],
[".aif", "audio/x-aiff"],
[".aifc", "audio/aiff"],
[".aiff", "audio/aiff"],
[".air", "application/vnd.Adobe.air-application-installer-package+Zip"],
[".amc", "application/x-mpeg"],
[".application", "application/x-ms-application"],
[".art", "image/x-jg"],
[".asa", "application/xml"],
[".asax", "application/xml"],
[".ascx", "application/xml"],
[".asd", "application/octet-stream"],
[".asf", "video/x-ms-asf"],
[".ashx", "application/xml"],
[".asi", "application/octet-stream"],
[".asm", "text/plain"],
[".asmx", "application/xml"],
[".aspx", "application/xml"],
[".asr", "video/x-ms-asf"],
[".asx", "video/x-ms-asf"],
[".atom", "application/atom+xml"],
[".au", "audio/basic"],
[".avi", "video/x-msvideo"],
[".axs", "application/olescript"],
[".bas", "text/plain"],
[".bcpio", "application/x-bcpio"],
[".bin", "application/octet-stream"],
[".bmp", "image/bmp"],
[".c", "text/plain"],
[".cab", "application/octet-stream"],
[".caf", "audio/x-caf"],
[".calx", "application/vnd.ms-office.calx"],
[".cat", "application/vnd.ms-pki.seccat"],
[".cc", "text/plain"],
[".cd", "text/plain"],
[".cdda", "audio/aiff"],
[".cdf", "application/x-cdf"],
[".cer", "application/x-x509-ca-cert"],
[".chm", "application/octet-stream"],
[".class", "application/x-Java-applet"],
[".clp", "application/x-msclip"],
[".cmx", "image/x-cmx"],
[".cnf", "text/plain"],
[".cod", "image/cis-cod"],
[".config", "application/xml"],
[".contact", "text/x-ms-contact"],
[".coverage", "application/xml"],
[".cpio", "application/x-cpio"],
[".cpp", "text/plain"],
[".crd", "application/x-mscardfile"],
[".crl", "application/pkix-crl"],
[".crt", "application/x-x509-ca-cert"],
[".cs", "text/plain"],
[".csdproj", "text/plain"],
[".csh", "application/x-csh"],
[".csproj", "text/plain"],
[".css", "text/css"],
[".csv", "text/csv"],
[".cur", "application/octet-stream"],
[".cxx", "text/plain"],
[".dat", "application/octet-stream"],
[".datasource", "application/xml"],
[".dbproj", "text/plain"],
[".dcr", "application/x-director"],
[".def", "text/plain"],
[".deploy", "application/octet-stream"],
[".der", "application/x-x509-ca-cert"],
[".dgml", "application/xml"],
[".dib", "image/bmp"],
[".dif", "video/x-dv"],
[".dir", "application/x-director"],
[".disco", "text/xml"],
[".dll", "application/x-msdownload"],
[".dll.config", "text/xml"],
[".dlm", "text/dlm"],
[".doc", "application/msword"],
[".docm", "application/vnd.ms-Word.document.macroEnabled.12"],
[".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"],
[".dot", "application/msword"],
[".dotm", "application/vnd.ms-Word.template.macroEnabled.12"],
[".dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"],
[".dsp", "application/octet-stream"],
[".dsw", "text/plain"],
[".dtd", "text/xml"],
[".dtsConfig", "text/xml"],
[".dv", "video/x-dv"],
[".dvi", "application/x-dvi"],
[".dwf", "drawing/x-dwf"],
[".dwp", "application/octet-stream"],
[".dxr", "application/x-director"],
[".eml", "message/rfc822"],
[".emz", "application/octet-stream"],
[".eot", "application/octet-stream"],
[".eps", "application/postscript"],
[".etl", "application/etl"],
[".etx", "text/x-setext"],
[".evy", "application/envoy"],
[".exe", "application/octet-stream"],
[".exe.config", "text/xml"],
[".fdf", "application/vnd.fdf"],
[".fif", "application/fractals"],
[".filters", "Application/xml"],
[".fla", "application/octet-stream"],
[".flr", "x-world/x-vrml"],
[".flv", "video/x-flv"],
[".fsscript", "application/fsharp-script"],
[".fsx", "application/fsharp-script"],
[".generictest", "application/xml"],
[".gif", "image/gif"],
[".group", "text/x-ms-group"],
[".gsm", "audio/x-gsm"],
[".gtar", "application/x-gtar"],
[".gz", "application/x-gzip"],
[".h", "text/plain"],
[".hdf", "application/x-hdf"],
[".hdml", "text/x-hdml"],
[".hhc", "application/x-oleobject"],
[".hhk", "application/octet-stream"],
[".hhp", "application/octet-stream"],
[".hlp", "application/winhlp"],
[".hpp", "text/plain"],
[".hqx", "application/mac-binhex40"],
[".hta", "application/hta"],
[".htc", "text/x-component"],
[".htm", "text/html"],
[".html", "text/html"],
[".htt", "text/webviewhtml"],
[".hxa", "application/xml"],
[".hxc", "application/xml"],
[".hxd", "application/octet-stream"],
[".hxe", "application/xml"],
[".hxf", "application/xml"],
[".hxh", "application/octet-stream"],
[".hxi", "application/octet-stream"],
[".hxk", "application/xml"],
[".hxq", "application/octet-stream"],
[".hxr", "application/octet-stream"],
[".hxs", "application/octet-stream"],
[".hxt", "text/html"],
[".hxv", "application/xml"],
[".hxw", "application/octet-stream"],
[".hxx", "text/plain"],
[".i", "text/plain"],
[".ico", "image/x-icon"],
[".ics", "application/octet-stream"],
[".idl", "text/plain"],
[".ief", "image/ief"],
[".iii", "application/x-iphone"],
[".inc", "text/plain"],
[".inf", "application/octet-stream"],
[".inl", "text/plain"],
[".ins", "application/x-internet-signup"],
[".ipa", "application/x-iTunes-ipa"],
[".ipg", "application/x-iTunes-ipg"],
[".ipproj", "text/plain"],
[".ipsw", "application/x-iTunes-ipsw"],
[".iqy", "text/x-ms-iqy"],
[".isp", "application/x-internet-signup"],
[".ite", "application/x-iTunes-ite"],
[".itlp", "application/x-iTunes-itlp"],
[".itms", "application/x-iTunes-itms"],
[".itpc", "application/x-iTunes-itpc"],
[".IVF", "video/x-ivf"],
[".jar", "application/Java-archive"],
[".Java", "application/octet-stream"],
[".jck", "application/liquidmotion"],
[".jcz", "application/liquidmotion"],
[".jfif", "image/pjpeg"],
[".jnlp", "application/x-Java-jnlp-file"],
[".jpb", "application/octet-stream"],
[".jpe", "image/jpeg"],
[".jpeg", "image/jpeg"],
[".jpg", "image/jpeg"],
[".js", "application/x-javascript"],
[".json", "application/json"],
[".jsx", "text/jscript"],
[".jsxbin", "text/plain"],
[".latex", "application/x-latex"],
[".library-ms", "application/windows-library+xml"],
[".lit", "application/x-ms-reader"],
[".loadtest", "application/xml"],
[".lpk", "application/octet-stream"],
[".lsf", "video/x-la-asf"],
[".lst", "text/plain"],
[".lsx", "video/x-la-asf"],
[".lzh", "application/octet-stream"],
[".m13", "application/x-msmediaview"],
[".m14", "application/x-msmediaview"],
[".m1v", "video/mpeg"],
[".m2t", "video/vnd.dlna.mpeg-tts"],
[".m2ts", "video/vnd.dlna.mpeg-tts"],
[".m2v", "video/mpeg"],
[".m3u", "audio/x-mpegurl"],
[".m3u8", "audio/x-mpegurl"],
[".m4a", "audio/m4a"],
[".m4b", "audio/m4b"],
[".m4p", "audio/m4p"],
[".m4r", "audio/x-m4r"],
[".m4v", "video/x-m4v"],
[".mac", "image/x-macpaint"],
[".mak", "text/plain"],
[".man", "application/x-troff-man"],
[".manifest", "application/x-ms-manifest"],
[".map", "text/plain"],
[".master", "application/xml"],
[".mda", "application/msaccess"],
[".mdb", "application/x-msaccess"],
[".mde", "application/msaccess"],
[".mdp", "application/octet-stream"],
[".me", "application/x-troff-me"],
[".mfp", "application/x-shockwave-flash"],
[".mht", "message/rfc822"],
[".mhtml", "message/rfc822"],
[".mid", "audio/mid"],
[".midi", "audio/mid"],
[".mix", "application/octet-stream"],
[".mk", "text/plain"],
[".mmf", "application/x-smaf"],
[".mno", "text/xml"],
[".mny", "application/x-msmoney"],
[".mod", "video/mpeg"],
[".mov", "video/quicktime"],
[".movie", "video/x-sgi-movie"],
[".mp2", "video/mpeg"],
[".mp2v", "video/mpeg"],
[".mp3", "audio/mpeg"],
[".mp4", "video/mp4"],
[".mp4v", "video/mp4"],
[".mpa", "video/mpeg"],
[".mpe", "video/mpeg"],
[".mpeg", "video/mpeg"],
[".mpf", "application/vnd.ms-mediapackage"],
[".mpg", "video/mpeg"],
[".mpp", "application/vnd.ms-project"],
[".mpv2", "video/mpeg"],
[".mqv", "video/quicktime"],
[".ms", "application/x-troff-ms"],
[".msi", "application/octet-stream"],
[".mso", "application/octet-stream"],
[".mts", "video/vnd.dlna.mpeg-tts"],
[".mtx", "application/xml"],
[".mvb", "application/x-msmediaview"],
[".mvc", "application/x-miva-compiled"],
[".mxp", "application/x-mmxp"],
[".nc", "application/x-netcdf"],
[".nsc", "video/x-ms-asf"],
[".nws", "message/rfc822"],
[".ocx", "application/octet-stream"],
[".oda", "application/oda"],
[".odc", "text/x-ms-odc"],
[".odh", "text/plain"],
[".odl", "text/plain"],
[".odp", "application/vnd.oasis.opendocument.presentation"],
[".ods", "application/oleobject"],
[".odt", "application/vnd.oasis.opendocument.text"],
[".one", "application/onenote"],
[".onea", "application/onenote"],
[".onepkg", "application/onenote"],
[".onetmp", "application/onenote"],
[".onetoc", "application/onenote"],
[".onetoc2", "application/onenote"],
[".orderedtest", "application/xml"],
[".osdx", "application/opensearchdescription+xml"],
[".p10", "application/pkcs10"],
[".p12", "application/x-pkcs12"],
[".p7b", "application/x-pkcs7-certificates"],
[".p7c", "application/pkcs7-mime"],
[".p7m", "application/pkcs7-mime"],
[".p7r", "application/x-pkcs7-certreqresp"],
[".p7s", "application/pkcs7-signature"],
[".pbm", "image/x-portable-bitmap"],
[".pcast", "application/x-podcast"],
[".pct", "image/pict"],
[".pcx", "application/octet-stream"],
[".pcz", "application/octet-stream"],
[".pdf", "application/pdf"],
[".pfb", "application/octet-stream"],
[".pfm", "application/octet-stream"],
[".pfx", "application/x-pkcs12"],
[".pgm", "image/x-portable-graymap"],
[".pic", "image/pict"],
[".pict", "image/pict"],
[".pkgdef", "text/plain"],
[".pkgundef", "text/plain"],
[".pko", "application/vnd.ms-pki.pko"],
[".pls", "audio/scpls"],
[".pma", "application/x-perfmon"],
[".pmc", "application/x-perfmon"],
[".pml", "application/x-perfmon"],
[".pmr", "application/x-perfmon"],
[".pmw", "application/x-perfmon"],
[".png", "image/png"],
[".pnm", "image/x-portable-anymap"],
[".pnt", "image/x-macpaint"],
[".pntg", "image/x-macpaint"],
[".pnz", "image/png"],
[".pot", "application/vnd.ms-PowerPoint"],
[".potm", "application/vnd.ms-PowerPoint.template.macroEnabled.12"],
[".potx", "application/vnd.openxmlformats-officedocument.presentationml.template"],
[".ppa", "application/vnd.ms-PowerPoint"],
[".ppam", "application/vnd.ms-PowerPoint.addin.macroEnabled.12"],
[".ppm", "image/x-portable-pixmap"],
[".pps", "application/vnd.ms-PowerPoint"],
[".ppsm", "application/vnd.ms-PowerPoint.slideshow.macroEnabled.12"],
[".ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow"],
[".ppt", "application/vnd.ms-PowerPoint"],
[".pptm", "application/vnd.ms-PowerPoint.presentation.macroEnabled.12"],
[".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"],
[".prf", "application/pics-rules"],
[".prm", "application/octet-stream"],
[".prx", "application/octet-stream"],
[".ps", "application/postscript"],
[".psc1", "application/PowerShell"],
[".psd", "application/octet-stream"],
[".psess", "application/xml"],
[".psm", "application/octet-stream"],
[".psp", "application/octet-stream"],
[".pub", "application/x-mspublisher"],
[".pwz", "application/vnd.ms-PowerPoint"],
[".qht", "text/x-html-insertion"],
[".qhtm", "text/x-html-insertion"],
[".qt", "video/quicktime"],
[".qti", "image/x-quicktime"],
[".qtif", "image/x-quicktime"],
[".qtl", "application/x-quicktimeplayer"],
[".qxd", "application/octet-stream"],
[".ra", "audio/x-pn-realaudio"],
[".ram", "audio/x-pn-realaudio"],
[".rar", "application/octet-stream"],
[".ras", "image/x-cmu-raster"],
[".rat", "application/rat-file"],
[".rc", "text/plain"],
[".rc2", "text/plain"],
[".rct", "text/plain"],
[".rdlc", "application/xml"],
[".resx", "application/xml"],
[".rf", "image/vnd.rn-realflash"],
[".rgb", "image/x-rgb"],
[".rgs", "text/plain"],
[".rm", "application/vnd.rn-realmedia"],
[".rmi", "audio/mid"],
[".rmp", "application/vnd.rn-rn_music_package"],
[".roff", "application/x-troff"],
[".rpm", "audio/x-pn-realaudio-plugin"],
[".rqy", "text/x-ms-rqy"],
[".rtf", "application/rtf"],
[".rtx", "text/richtext"],
[".ruleset", "application/xml"],
[".s", "text/plain"],
[".safariextz", "application/x-safari-safariextz"],
[".scd", "application/x-msschedule"],
[".sct", "text/scriptlet"],
[".sd2", "audio/x-sd2"],
[".sdp", "application/sdp"],
[".sea", "application/octet-stream"],
[".searchConnector-ms", "application/windows-search-connector+xml"],
[".setpay", "application/set-payment-initiation"],
[".setreg", "application/set-registration-initiation"],
[".settings", "application/xml"],
[".sgimb", "application/x-sgimb"],
[".sgml", "text/sgml"],
[".sh", "application/x-sh"],
[".shar", "application/x-shar"],
[".shtml", "text/html"],
[".sit", "application/x-stuffit"],
[".sitemap", "application/xml"],
[".skin", "application/xml"],
[".sldm", "application/vnd.ms-PowerPoint.slide.macroEnabled.12"],
[".sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide"],
[".slk", "application/vnd.ms-Excel"],
[".sln", "text/plain"],
[".slupkg-ms", "application/x-ms-license"],
[".smd", "audio/x-smd"],
[".smi", "application/octet-stream"],
[".smx", "audio/x-smd"],
[".smz", "audio/x-smd"],
[".snd", "audio/basic"],
[".snippet", "application/xml"],
[".snp", "application/octet-stream"],
[".sol", "text/plain"],
[".sor", "text/plain"],
[".spc", "application/x-pkcs7-certificates"],
[".spl", "application/futuresplash"],
[".src", "application/x-wais-source"],
[".srf", "text/plain"],
[".SSISDeploymentManifest", "text/xml"],
[".ssm", "application/streamingmedia"],
[".sst", "application/vnd.ms-pki.certstore"],
[".stl", "application/vnd.ms-pki.stl"],
[".sv4cpio", "application/x-sv4cpio"],
[".sv4crc", "application/x-sv4crc"],
[".svc", "application/xml"],
[".swf", "application/x-shockwave-flash"],
[".t", "application/x-troff"],
[".tar", "application/x-tar"],
[".tcl", "application/x-tcl"],
[".testrunconfig", "application/xml"],
[".testsettings", "application/xml"],
[".tex", "application/x-tex"],
[".texi", "application/x-texinfo"],
[".texinfo", "application/x-texinfo"],
[".tgz", "application/x-compressed"],
[".thmx", "application/vnd.ms-officetheme"],
[".thn", "application/octet-stream"],
[".tif", "image/tiff"],
[".tiff", "image/tiff"],
[".tlh", "text/plain"],
[".tli", "text/plain"],
[".toc", "application/octet-stream"],
[".tr", "application/x-troff"],
[".trm", "application/x-msterminal"],
[".trx", "application/xml"],
[".ts", "video/vnd.dlna.mpeg-tts"],
[".tsv", "text/tab-separated-values"],
[".ttf", "application/octet-stream"],
[".tts", "video/vnd.dlna.mpeg-tts"],
[".txt", "text/plain"],
[".u32", "application/octet-stream"],
[".uls", "text/iuls"],
[".user", "text/plain"],
[".ustar", "application/x-ustar"],
[".vb", "text/plain"],
[".vbdproj", "text/plain"],
[".vbk", "video/mpeg"],
[".vbproj", "text/plain"],
[".vbs", "text/vbscript"],
[".vcf", "text/x-vcard"],
[".vcproj", "Application/xml"],
[".vcs", "text/plain"],
[".vcxproj", "Application/xml"],
[".vddproj", "text/plain"],
[".vdp", "text/plain"],
[".vdproj", "text/plain"],
[".vdx", "application/vnd.ms-visio.viewer"],
[".vml", "text/xml"],
[".vscontent", "application/xml"],
[".vsct", "text/xml"],
[".vsd", "application/vnd.visio"],
[".vsi", "application/ms-vsi"],
[".vsix", "application/vsix"],
[".vsixlangpack", "text/xml"],
[".vsixmanifest", "text/xml"],
[".vsmdi", "application/xml"],
[".vspscc", "text/plain"],
[".vss", "application/vnd.visio"],
[".vsscc", "text/plain"],
[".vssettings", "text/xml"],
[".vssscc", "text/plain"],
[".vst", "application/vnd.visio"],
[".vstemplate", "text/xml"],
[".vsto", "application/x-ms-vsto"],
[".vsw", "application/vnd.visio"],
[".vsx", "application/vnd.visio"],
[".vtx", "application/vnd.visio"],
[".wav", "audio/wav"],
[".wave", "audio/wav"],
[".wax", "audio/x-ms-wax"],
[".wbk", "application/msword"],
[".wbmp", "image/vnd.wap.wbmp"],
[".wcm", "application/vnd.ms-works"],
[".wdb", "application/vnd.ms-works"],
[".wdp", "image/vnd.ms-photo"],
[".webarchive", "application/x-safari-webarchive"],
[".webtest", "application/xml"],
[".wiq", "application/xml"],
[".wiz", "application/msword"],
[".wks", "application/vnd.ms-works"],
[".WLMP", "application/wlmoviemaker"],
[".wlpginstall", "application/x-wlpg-detect"],
[".wlpginstall3", "application/x-wlpg3-detect"],
[".wm", "video/x-ms-wm"],
[".wma", "audio/x-ms-wma"],
[".wmd", "application/x-ms-wmd"],
[".wmf", "application/x-msmetafile"],
[".wml", "text/vnd.wap.wml"],
[".wmlc", "application/vnd.wap.wmlc"],
[".wmls", "text/vnd.wap.wmlscript"],
[".wmlsc", "application/vnd.wap.wmlscriptc"],
[".wmp", "video/x-ms-wmp"],
[".wmv", "video/x-ms-wmv"],
[".wmx", "video/x-ms-wmx"],
[".wmz", "application/x-ms-wmz"],
[".wpl", "application/vnd.ms-wpl"],
[".wps", "application/vnd.ms-works"],
[".wri", "application/x-mswrite"],
[".wrl", "x-world/x-vrml"],
[".wrz", "x-world/x-vrml"],
[".wsc", "text/scriptlet"],
[".wsdl", "text/xml"],
[".wvx", "video/x-ms-wvx"],
[".x", "application/directx"],
[".xaf", "x-world/x-vrml"],
[".xaml", "application/xaml+xml"],
[".xap", "application/x-silverlight-app"],
[".xbap", "application/x-ms-xbap"],
[".xbm", "image/x-xbitmap"],
[".xdr", "text/plain"],
[".xht", "application/xhtml+xml"],
[".xhtml", "application/xhtml+xml"],
[".xla", "application/vnd.ms-Excel"],
[".xlam", "application/vnd.ms-Excel.addin.macroEnabled.12"],
[".xlc", "application/vnd.ms-Excel"],
[".xld", "application/vnd.ms-Excel"],
[".xlk", "application/vnd.ms-Excel"],
[".xll", "application/vnd.ms-Excel"],
[".xlm", "application/vnd.ms-Excel"],
[".xls", "application/vnd.ms-Excel"],
[".xlsb", "application/vnd.ms-Excel.sheet.binary.macroEnabled.12"],
[".xlsm", "application/vnd.ms-Excel.sheet.macroEnabled.12"],
[".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],
[".xlt", "application/vnd.ms-Excel"],
[".xltm", "application/vnd.ms-Excel.template.macroEnabled.12"],
[".xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template"],
[".xlw", "application/vnd.ms-Excel"],
[".xml", "text/xml"],
[".xmta", "application/xml"],
[".xof", "x-world/x-vrml"],
[".XOML", "text/plain"],
[".xpm", "image/x-xpixmap"],
[".xps", "application/vnd.ms-xpsdocument"],
[".xrm-ms", "text/xml"],
[".xsc", "application/xml"],
[".xsd", "text/xml"],
[".xsf", "text/xml"],
[".xsl", "text/xml"],
[".xslt", "text/xml"],
[".xsn", "application/octet-stream"],
[".xss", "application/xml"],
[".xtp", "application/octet-stream"],
[".xwd", "image/x-xwindowdump"],
[".z", "application/x-compress"],
[".Zip", "application/x-Zip-compressed"]
];
// ----------------------- End of Extensions to MIME --------- //
Peut-être que votre code javascript ouvre une page qui télécharge un fichier, comme lorsque vous faites glisser un lien de téléchargement dans un nouvel onglet:
Window.open("https://www.MyServer.
Org/downloads/ardiuno/WgiWho=?:8080")
Avec la fenêtre ouverte, ouvrez une page de téléchargement qui se ferme automatiquement.
Pour améliorer la réponse d'Imagine Breaker, ceci est supporté par FF & IE:
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
function downloadURI(uri, name) {
var link = document.createElement("a");
link.download = name;
link.href = uri;
link.dispatchEvent(evt);
}
En d'autres termes, utilisez simplement une fonction dispatchEvent
au lieu de click()
;
J'ai eu de bons résultats avec l'utilisation d'une balise FORM, car elle fonctionne partout et vous n'avez pas besoin de créer temporairement des fichiers sur le serveur. La méthode fonctionne comme ça.
Du côté client (page HTML), vous créez un formulaire invisible comme celui-ci.
<form method="POST" action="/download.php" target="_blank" id="downloadForm">
<input type="hidden" name="data" id="csv">
</form>
Ensuite, vous ajoutez ce code Javascript à votre bouton:
$('#button').click(function() {
$('#csv').val('---your data---');
$('#downloadForm').submit();
}
Sur le serveur, vous avez le code PHP suivant dans download.php
:
<?php
header('Content-Type: text/csv');
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=out.csv');
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . strlen($data));
echo $_REQUEST['data'];
exit();
Vous pouvez même créer des fichiers Zip contenant vos données comme ceci:
<?php
$file = tempnam("tmp", "Zip");
$Zip = new ZipArchive();
$Zip->open($file, ZipArchive::OVERWRITE);
$Zip->addFromString('test.csv', $_REQUEST['data']);
$Zip->close();
header('Content-Type: application/Zip');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="file.Zip"');
readfile($file);
unlink($file);
La meilleure partie est qu’il ne laisse aucun fichier résiduel sur votre serveur car tout est créé et détruit à la volée!
Cela pourrait être utile si vous n’êtes pas obligé de naviguer sur une autre page . C’est une fonction javascript de base, qui peut donc être utilisée sur toutes les plateformes où le backend est en Javascript
window.location.assign('any url or file path')
Ces fonctions sont utilisées dans stacktrace.js :
/**
* Try XHR methods in order and store XHR factory.
*
* @return <Function> XHR function or equivalent
*/
var createXMLHTTPObject = function() {
var xmlhttp, XMLHttpFactories = [
function() {
return new XMLHttpRequest();
}, function() {
return new ActiveXObject('Msxml2.XMLHTTP');
}, function() {
return new ActiveXObject('Msxml3.XMLHTTP');
}, function() {
return new ActiveXObject('Microsoft.XMLHTTP');
}
];
for (var i = 0; i < XMLHttpFactories.length; i++) {
try {
xmlhttp = XMLHttpFactories[i]();
// Use memoization to cache the factory
createXMLHTTPObject = XMLHttpFactories[i];
return xmlhttp;
} catch (e) {
}
}
}
/**
* @return the text from a given URL
*/
function ajax(url) {
var req = createXMLHTTPObject();
if (req) {
try {
req.open('GET', url, false);
req.send(null);
return req.responseText;
} catch (e) {
}
}
return '';
}
La réponse soumise par hitesh le 30 décembre 2013 fonctionne effectivement. Cela nécessite juste un petit ajustement:
Le fichier PHP peut s'appeler lui-même. En d'autres termes, créez simplement un fichier nommé saveAs.php, et mettez-y ce code ...
<a href="saveAs.php?file_source=YourDataFile.pdf">Download pdf here</a>
<?php
if (isset($_GET['file_source'])) {
$fullPath = $_GET['file_source'];
if($fullPath) {
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
switch ($ext) {
case "pdf":
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download
header("Content-type: application/pdf"); // add here more headers for diff. extensions
break;
default;
header("Content-type: application/octet-stream");
header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
}
if($fsize) {//checking if file size exist
header("Content-length: $fsize");
}
readfile($fullPath);
exit;
}
}
?>
Je vous suggère d'utiliser l'événement mousedown, appelé AVANT l'événement click. De cette façon, le navigateur gère l'événement click naturellement, ce qui évite toute étrangeté de code:
(function ($) {
// with this solution, the browser handles the download link naturally (tested in chrome and firefox)
$(document).ready(function () {
var url = '/private/downloads/myfile123.pdf';
$("a#someID").on('mousedown', function () {
$(this).attr("href", url);
});
});
})(jQuery);
Excellente solution de Corbacho, je viens de m'adapter pour me débarrasser du var
function downloadURL(url) {
if( $('#idown').length ){
$('#idown').attr('src',url);
}else{
$('<iframe>', { id:'idown', src:url }).hide().appendTo('body');
}
}
pour moi cela fonctionne bien testé en chrome v72
function down_file(url,name){
var a = $("<a>")
.attr("href", url)
.attr("download", name)
.appendTo("body");
a[0].click();
a.remove();
}
down_file('https://www.useotools.com/uploads/nulogo[1].png','logo.png')
J'utilise la solution de @ rakaloof sans JQuery (car vous n'en avez pas besoin ici ). Merci pour l'idée! Voici une solution à base de formulaire vanillaJS:
const uri = 'https://upload.wikimedia.org/wikipedia/commons/b/bb/Test_ogg_mp3_48kbps.wav';
let form = document.createElement("form");
form.setAttribute('action', uri);
document.body.appendChild(form);
form.submit();
document.body.removeChild(document.body.lastElementChild);
Firefox et Chrome testés:
var link = document.createElement('a');
link.download = 'fileName.ext'
link.href = 'http://down.serv/file.ext';
// Because firefox not executing the .click() well
// We need to create mouse event initialization.
var clickEvent = document.createEvent("MouseEvent");
clickEvent.initEvent("click", true, true);
link.dispatchEvent(clickEvent);
Il s’agit en fait de la solution "chrome" pour Firefox (je ne l’ai pas testée sur d’autres navigateurs, merci de laisser des commentaires sur sa compilabilité)
J'ai fini par utiliser l'extrait ci-dessous et cela fonctionne dans la plupart des navigateurs, non testé dans IE cependant.
function downloadURI(uri, name) {
let link = document.createElement("a");
link.download = name;
link.href = uri;
link.style.display = "none";
document.body.appendChild(link);
if (typeof MouseEvent !== "undefined") {
link.dispatchEvent(new MouseEvent("click"));
} else {
link.click();
}
document.body.removeChild(link);
}
let data = [{email: "[email protected]", name: "test"}, {email: "[email protected]", name: "anothertest"}];
let json = JSON.stringify(data);
let blob = new Blob([json], {type: "application/json"});
let url = window.URL.createObjectURL(blob);
downloadURI(url, "file.json");
window.URL.revokeObjectURL(url);
Je sais que je suis en retard pour la fête, mais j'aimerais partager ma solution, qui est une variante de la solution d'Imagine Breaker ci-dessus. J'ai essayé d'utiliser sa solution, car sa solution me semble la plus simple et la plus facile. Mais comme d’autres dit, cela ne fonctionnait pas pour certains navigateurs, j’ai donc utilisé une certaine variation en utilisant jquery.
J'espère que cela pourrait aider quelqu'un.
function download(url) {
var link = document.createElement("a");
$(link).click(function(e) {
e.preventDefault();
window.location.href = url;
});
$(link).click();
}
Remarque: non pris en charge par tous les navigateurs.
Je cherchais un moyen de télécharger un fichier avec jQuery sans avoir à définir l'URL du fichier dans l'attribut href depuis le début.
jQuery('<a/>', {
id: 'downloadFile',
href: 'http://cdn.sstatic.net/Sites/stackoverflow/img/[email protected]',
style: 'display:hidden;',
download: ''
}).appendTo('body');
$("#downloadFile")[0].click();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
En utilisant la balise d'ancrage et PHP cela peut être fait, Cochez cette réponse
Appel JQuery Ajax pour téléchargement de fichier PDF
HTML
<a href="www.example.com/download_file.php?file_source=example.pdf">Download pdf here</a>
PHP
<?php
$fullPath = $_GET['fileSource'];
if($fullPath) {
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
switch ($ext) {
case "pdf":
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download
header("Content-type: application/pdf"); // add here more headers for diff. extensions
break;
default;
header("Content-type: application/octet-stream");
header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
}
if($fsize) {//checking if file size exist
header("Content-length: $fsize");
}
readfile($fullPath);
exit;
}
?>
Je vérifie la taille du fichier, car si vous chargez le fichier PDF à partir de CDN cloudfront, vous n’obtiendrez pas la taille du document qui force le téléchargement du document en format 0kb.
if($fsize) {//checking if file size exist
header("Content-length: $fsize");
}
Il y a tellement de petites choses qui peuvent arriver lorsque vous essayez de télécharger un fichier. La contradiction entre les navigateurs est à elle seule un cauchemar. J'ai fini par utiliser cette super petite bibliothèque. https://github.com/rndme/download
Ce qui est bien, c’est qu’il est flexible non seulement pour les URL, mais pour les données côté client que vous souhaitez télécharger.