Saya memiliki persyaratan yang sangat mirip yang ditentukan di sini . Saya harus meminta browser
pengguna memulai pengunduhan secara manual ketika $('a#someID').click(); Tetapi saya tidak dapat menggunakan window.hrefmetode ini, karena ini menggantikan konten halaman saat ini dengan file yang Anda coba unduh. Sebaliknya saya ingin membuka unduhan di jendela / tab baru. Bagaimana ini mungkin?
Jawaban:
Gunakan yang tidak terlihat <iframe>:
<iframe id="my_iframe" style="display:none;"></iframe> <script> function Download(url) { document.getElementById('my_iframe').src = url; }; </script>Untuk memaksa browser mengunduh file yang seharusnya dapat dirender (seperti file HTML atau teks), Anda memerlukan server untuk mengatur Jenis MIME file ke nilai yang tidak masuk akal, seperti application/x-please-download-meatau sebagai alternatif application/octet-stream, yang digunakan untuk biner acak data.
Jika Anda hanya ingin membukanya di tab baru, satu-satunya cara untuk melakukan ini adalah bagi pengguna untuk mengklik pada tautan dengan targetatributnya diatur ke _blank.
Di jQuery:
$('a#someID').attr({target: '_blank', href : '//localhost/directory/file.pdf'});Setiap kali tautan itu diklik, ia akan mengunduh file di tab / jendela baru.
2019 pembaruan browser modern
Inilah pendekatan yang sekarang saya rekomendasikan dengan beberapa peringatan:
- Diperlukan browser yang relatif modern
- Jika file diharapkan sangat besar, Anda mungkin harus melakukan sesuatu yang mirip dengan pendekatan asli (iframe dan cookie) karena beberapa operasi di bawah ini mungkin dapat mengkonsumsi memori sistem setidaknya sebesar file yang sedang diunduh dan / atau CPU menarik lainnya. efek samping.
fetch('//jsonplaceholder.typicode.com/todos/1') .then(resp => resp.blob()) .then(blob => { const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.style.display = 'none'; a.href = url; // the filename you want a.download = 'todo-1.json'; document.body.appendChild(a); a.click(); window.URL.revokeObjectURL(url); alert('your file has downloaded!'); // or you know, something with better UX... }) .catch(() => alert('oh no!'));
2012 pendekatan berbasis jQuery / iframe / cookie asli
Saya telah membuat plugin Unduhan File jQuery ( Demo ) ( GitHub ) yang juga dapat membantu situasi Anda. Ini berfungsi sangat mirip dengan iframe tetapi memiliki beberapa fitur keren yang menurut saya cukup berguna:
Sangat mudah diatur dengan visual yang bagus (jQuery UI Dialog, tetapi tidak diharuskan), semuanya juga diuji
Pengguna tidak pernah meninggalkan halaman yang sama dengan tempat mereka memulai unduhan file. Fitur ini menjadi sangat penting untuk aplikasi web modern
Fungsi successCallback dan failCallback memungkinkan Anda untuk secara eksplisit tentang apa yang dilihat pengguna dalam kedua situasi tersebut
Sehubungan dengan jQuery UI, pengembang dapat dengan mudah menunjukkan modal yang memberi tahu pengguna bahwa terjadi unduhan file, membubarkan modal setelah unduhan dimulai atau bahkan memberi tahu pengguna dengan ramah bahwa ada kesalahan. Lihat Demo untuk contohnya. Semoga ini bisa membantu seseorang!
Berikut ini adalah contoh penggunaan sederhana menggunakan sumber plugin dengan janji. The halaman demo mencakup banyak lainnya, 'lebih baik UX' contoh juga.
$.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"); // If you don't know the name or want to use // the webserver default set name = '' link.setAttribute('download', name); link.href = uri; document.body.appendChild(link); link.click(); link.remove(); }
Periksa apakah browser target Anda akan menjalankan potongan di atas dengan lancar:
//caniuse.com/#feat=download
Saya terkejut tidak banyak orang tahu tentang atribut unduhan untuk suatu elemen. Tolong bantu sebarkan berita tentang itu! Anda dapat memiliki tautan html tersembunyi, dan memalsukan klik di atasnya. Jika tautan html memiliki atribut unduhan, ia mengunduh file, bukan melihatnya, apa pun yang terjadi. Ini kodenya. Ini akan mengunduh gambar kucing jika dapat menemukannya.
document.getElementById('download').click();<a href="//docs.google.com/uc?id=0B0jH18Lft7ypSmRjdWg1c082Y2M" download id="download" hidden></a>
Catatan: Ini tidak didukung di semua browser: //www.w3schools.com/tags/att_a_download.asp
Saya sarankan menggunakan yang downloadatribut untuk di-download bukannya jQuery:
<a href="your_link" download> file_name </a>Ini akan mengunduh file Anda, tanpa membukanya.
Jika Anda sudah menggunakan jQuery, Anda bisa memanfaatkannya untuk menghasilkan potongan yang lebih kecil
. Versi jQuery dari jawaban Andrew:
Bekerja di Chrome, Firefox, dan IE8 dan di atasnya.
var link=document.createElement('a'); document.body.appendChild(link); link.href=url ; link.click();Contoh sederhana menggunakan iframe
function downloadURL(url) { var hiddenIFrameID = 'hiddenDownloader', iframe = document.getElementById(hiddenIFrameID); if (iframe === null) { iframe = document.createElement('iframe'); iframe.id = hiddenIFrameID; iframe.style.display = 'none'; document.body.appendChild(iframe); } iframe.src = url; };Kemudian panggil saja fungsi di mana pun Anda inginkan:
downloadURL('path/to/my/file');
Ini bisa membantu jika Anda tidak perlu menavigasi halaman lain. Ini adalah fungsi dasar javascript, sehingga dapat digunakan di platform mana pun di mana backend berada dalam Javascript
window.location.assign('any url or file path')Hanya tujuh tahun kemudian di sini datang solusi jQuery satu baris menggunakan formulir, bukan iframe atau tautan:
$('<form></form>') .attr('action', filePath) .appendTo('body').submit().remove();Saya sudah menguji ini
- Chrome 55
- Firefox 50
- Edge IE8-10
- iOS 10 (Safari / Chrome)
- Android Chrome
Jika ada yang tahu ada kerugian dengan solusi ini saya akan sangat senang mendengarnya.
Demo penuh:
<html> <head><script src="//code.jquery.com/jquery-1.11.3.js"></script></head> <body> <script> var filePath = window.prompt("Enter a file URL","//jqueryui.com/resources/download/jquery-ui-1.12.1.zip"); $('<form></form>').attr('action', filePath).appendTo('body').submit().remove(); </script> </body> </html>Saya tidak tahu apakah pertanyaannya terlalu lama, tetapi pengaturan window.lokasi ke url unduhan akan berfungsi, asalkan tipe unduhan mime benar (misalnya arsip zip).
Saya akhirnya menggunakan potongan di bawah ini dan berfungsi di sebagian besar browser, tidak diuji di IE sekalipun.
let data = JSON.stringify([{email: "", name: "test"}, {email: "", name: "anothertest"}]); let type = "application/json", name = "testfile.json"; downloader(data, type, name) function downloader(data, type, name) { let blob = new Blob([data], {type}); let url = window.URL.createObjectURL(blob); downloadURI(url, name); window.URL.revokeObjectURL(url); } function downloadURI(uri, name) { let link = document.createElement("a"); link.download = name; link.href = uri; link.click(); }
Memperbarui
function downloadURI(uri, name) { let link = document.createElement("a"); link.download = name; link.href = uri; link.click(); } function downloader(data, type, name) { let blob = new Blob([data], {type}); let url = window.URL.createObjectURL(blob); downloadURI(url, name); window.URL.revokeObjectURL(url); }Untuk meningkatkan jawaban Imagine Breaker, ini didukung pada 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); }Dengan kata lain, cukup gunakan dispatchEventfungsi alih-alih click();
Mungkin javascript Anda hanya membuka halaman yang baru saja mengunduh file, seperti saat Anda menyeret tautan unduhan ke tab baru:
Window.open("https://www.MyServer. Org/downloads/ardiuno/WgiWho=?:8080")Dengan jendela yang terbuka, buka halaman unduhan yang otomatis ditutup.
Kode Paling Lengkap dan Berfungsi (Diuji) untuk Mengunduh Data Untuk FireFox, Chrome dan Kode IE adalah Mengikuti. Asumsikan bahwa Data berada dalam bidang texarea , yang memiliki id = 'textarea_area' dan nama file adalah nama file tempat data akan diunduh.
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( ' title' , evObj ); } else { // For Any Case pom.click(); } }dan kemudian panggil saja
<a href="javascript:download();">Download</a>Untuk Memulai Pengunduhan.
Array untuk pengaturan tipe MIME yang benar untuk dialog unduhan DAPAT mengikuti:
// ----------------------- 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 --------- //bagi saya ini berfungsi ok diuji di 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('//www.useotools.com/uploads/nulogo[1].png','logo.png')Saya memiliki hasil yang baik dengan menggunakan tag FORMULIR karena ia bekerja di mana-mana dan Anda tidak perlu membuat file sementara di server. Metodenya bekerja seperti ini.
Di sisi klien (halaman HTML) Anda membuat formulir yang tidak terlihat seperti ini
<form method="POST" action="/download.php" target="_blank" id="downloadForm"> <input type="hidden" name="data" id="csv"> </form>Kemudian Anda menambahkan kode Javascript ini ke tombol Anda:
$('#button').click(function() { $('#csv').val('---your data---'); $('#downloadForm').submit(); }Di sisi server Anda memiliki kode PHP berikut 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();Anda bahkan dapat membuat file zip data Anda seperti ini:
<?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);Bagian terbaiknya adalah tidak meninggalkan file residu di server Anda karena semuanya dibuat dan dihancurkan dengan cepat!
Jawaban yang diajukan oleh hitesh pada 30 Desember '13 ternyata bekerja. Itu hanya membutuhkan sedikit penyesuaian:
File PHP dapat memanggil dirinya sendiri. Dengan kata lain, cukup buat file bernama saveAs.php, dan masukkan kode ini ke dalamnya ...
<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; } } ?>Fungsi-fungsi ini digunakan di 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 ''; }Saya sarankan Anda menggunakan acara mousedown, yang disebut SEBELUM acara klik. Dengan begitu, browser menangani acara klik secara alami, yang menghindari keanehan kode:
(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);Solusi Excelent dari Corbacho, saya baru saja beradaptasi untuk menyingkirkan var
function downloadURL(url) { if( $('#idown').length ){ $('#idown').attr('src',url); }else{ $('<iframe>', { id:'idown', src:url }).hide().appendTo('body'); } }Firefox dan Chrome diuji:
var link = document.createElement('a'); link.download = 'fileName.ext' link.href = '//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);Ini sebenarnya adalah solusi cara "chrome" untuk firefox (saya tidak mengujinya di browser lain, jadi silakan tinggalkan komentar tentang kompilabilitas)
Ada begitu banyak hal kecil yang dapat terjadi ketika mencoba mengunduh file. Ketidakkonsistenan antara browser saja adalah mimpi buruk. Saya akhirnya menggunakan perpustakaan kecil yang hebat ini. //github.com/rndme/download
Yang menyenangkan tentang itu adalah fleksibel untuk tidak hanya url tetapi untuk data sisi klien yang ingin Anda unduh.
- string teks
- data teksURL
- gumpalan teks
- array teks
- string html
- html gumpalan
- panggilan balik ajax
- file biner
Menggunakan tag jangkar dan PHP itu bisa dilakukan, Periksa jawaban ini
JQuery Ajax call untuk mengunduh file 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; } ?>Saya memeriksa ukuran file karena jika Anda memuat pdf dari CDN cloudfront, Anda tidak akan mendapatkan ukuran dokumen yang memaksa dokumen untuk mengunduh dalam 0kb, Untuk menghindari hal ini saya memeriksa dengan kondisi ini
if($fsize) {//checking if file size exist header("Content-length: $fsize"); }Saya tahu saya terlambat ke pesta, tetapi saya ingin membagikan solusi saya yang merupakan variasi dari solusi Imagine Breaker di atas. Saya mencoba menggunakan solusinya, karena solusinya tampaknya paling sederhana dan mudah bagi saya. Tapi seperti kata yang lain, itu tidak bekerja untuk beberapa browser, jadi saya menaruh beberapa variasi di atasnya dengan menggunakan jquery.
Semoga ini bisa membantu seseorang di luar sana.
function download(url) { var link = document.createElement("a"); $(link).click(function(e) { e.preventDefault(); window.location.href = url; }); $(link).click(); }Catatan: Tidak didukung di semua browser.
Saya sedang mencari cara untuk mengunduh file menggunakan jquery tanpa harus mengatur url file di atribut href dari awal.
jQuery('<a/>', { id: 'downloadFile', href: '//cdn.sstatic.net/Sites/stackoverflow/img/', style: 'display:hidden;', download: '' }).appendTo('body'); $("#downloadFile")[0].click();<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Saya menggunakan solusi @ rakaloof tanpa JQuery (karena Anda tidak membutuhkannya di sini ). Terima kasih atas idenya! Berikut ini adalah solusi berbasis form vanillaJS:
const uri = '//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);