Javascript / jQuery Kullanarak Dosya İndirme


358

Burada çok benzer bir gereksinimim var .

Kullanıcının tarayıcısının, $('a#someID').click();

Ancak window.hrefyöntemi kullanamıyorum , çünkü geçerli sayfa içeriğini indirmeye çalıştığınız dosyayla değiştiriyor.

Bunun yerine indirmeyi yeni pencerede / sekmede açmak istiyorum. Bu nasıl mümkün olabilir?


İlgili sorularda birçok cevap denedim ve bu kesin cevap .
Basj

Window.location.href ayarı benim için çalışıyor. Ayrıca pencere içeriği DEĞİLDİR. Yanlış contentType kullandığınızı varsayıyorum?
BluE

Yanıtlar:


379

Görünmez kullanın <iframe>:

<iframe id="my_iframe" style="display:none;"></iframe>
<script>
function Download(url) {
    document.getElementById('my_iframe').src = url;
};
</script>

Tarayıcıyı, aksi takdirde oluşturabileceği bir dosyayı (HTML veya metin dosyaları gibi) indirmeye zorlamak için, sunucunun dosyanın MIME Türünüapplication/x-please-download-me veya alternatifi gibi saçma bir değere ayarlaması gerekir.application/octet-stream rastgele veya ikili gibi kullanılan veri.

Yalnızca yeni bir sekmede açmak istiyorsanız, bunu yapmanın tek yolu, kullanıcının targetözelliği ayarlanmış bir bağlantıyı tıklamasıdır _blank.

JQuery'de:

$('a#someID').attr({target: '_blank', 
                    href  : 'http://localhost/directory/file.pdf'});

Bu bağlantı her tıklandığında dosyayı yeni bir sekmede / pencerede indirir.


4
Bir web sayfası yeni bir sekmeyi otomatik olarak açamaz. Tarayıcıyı indirmeye zorlamak için, sunucuyu pdf dosyasını application / x-please-download-me gibi saçma bir MIME tipi ile göndermesini sağlayın
Randy the Dev

14
Güzel yapılmış! Sorunu iyi çözer. Ancak, şunu kullanmak isteyebilirsiniz: iframe.style.display = 'none'; bu iframe'i tamamen gizleyecektir. Geçerli uygulamanız iframe'i görünmez yapacak, ancak iframe sayfanın altında yine de fazladan beyaz alana neden olacak alan kaplayacak.
Akrikos

2
"Yarı" benim için çalışıyor. Aşağıdaki basit testi html oluşturdum: <html> <body> <iframe src = "fileurl"> </iframe> </body> </html> ve indirildi, ancak krom konsolunda indirmenin "iptal edildi" ve kırmızı renkte görünür. Bu, daha büyük bir mobil web uygulamasının bir parçasıdır ve iptal edilmesinin nedeni, genel bir web hatasını artırdığı için uygulamayı bozar. Bunun herhangi bir yolu var mı?
Sagi Mann

27
Güzel pasaj. Ancak, saçma sapan şeyler türünü belirlemek biraz rahatsız edicidir. Tarayıcıdan oluşturabileceği bir dosyayı indirmesini istemek için aşağıdaki başlığı kullanın: Content-Disposition: attachment; filename="downloaded.pdf"(elbette dosya adını istediğiniz gibi özelleştirebilirsiniz).
rixo

2
İndirme işlemini sunucu olmadan nasıl zorlarım? Yani sadece bir javascript ile bir html sayfası.
Rodrigo Ruiz

222

2019 Modern Tarayıcılar Güncellemesi

Şimdi birkaç uyarı ile önereceğim yaklaşım budur:

  • Nispeten modern bir tarayıcı gerekli
  • Dosyanın çok büyük olması bekleniyorsa , muhtemelen orijinal yaklaşıma (iframe ve çerez) benzer bir şey yapmalısınız, çünkü aşağıdaki işlemlerden bazıları sistem belleğini en az indirilen dosya ve / veya diğer ilginç CPU kadar büyük tüketebilir. yan etkiler.

fetch('https://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 orijinal jQuery / iframe / çerez tabanlı yaklaşım

Ben oluşturduk jQuery Dosya İndirme eklentisi ( Demo ) ( GitHub ) durumunuza ile olabilir ayrıca yardımcı olur. Bir iframe ile oldukça benzer şekilde çalışır, ancak oldukça kullanışlı bulduğum bazı harika özelliklere sahiptir:

  • Güzel görsellerle kurulumu çok kolaydır (jQuery UI İletişim Kutusu, ancak gerekli değildir), her şey de test edilir

  • Kullanıcı asla dosya indirme işlemini başlattığı sayfayı terk etmez. Bu özellik modern web uygulamaları için çok önemli hale geliyor

  • successCallback ve failCallback işlevleri, kullanıcının her iki durumda da gördükleri konusunda açık olmanızı sağlar

  • JQuery UI ile birlikte bir geliştirici, kullanıcıya bir dosya indirme işleminin gerçekleştiğini söyleyen bir kipi kolayca gösterebilir, indirme başladıktan sonra kipin bağlantısını kesebilir ve hatta kullanıcıyı bir hata meydana geldiğini dostane bir şekilde bilgilendirebilir. Bkz. bir örneği Demoya . Umarım bu birine yardımcı olur!

İşte sözler ile eklenti kaynağını kullanarak basit bir kullanım örneği demo . Demo sayfası sıra diğer birçok, 'daha iyi UX' örneklerini içerir.

$.fileDownload('some/file.pdf')
    .done(function () { alert('File download a success!'); })
    .fail(function () { alert('File download failed!'); });

@JohnCulviner: posta yönteminizde json verileri gönderebilir miyim. Denedim ve başarısız oldum. Bana örnek verebilir misin
Saravanan

Parametreleri aramaya aktarmak mümkün müdür? Diyelim ki sunucunun indirmek istediğim dosyayı oluşturması için bazı kimlikleri iletmem gerekiyor, bunu nasıl yapabilirim? teşekkürler
omer schleifer

Have have 100. Olumlu oy. Zaman ayırdığınız için teşekkürler - bu gerçekten değerli. Bağışlar için bir PayPal bağlantısı oluşturmayı düşünün. Bağış ederdim.
Stephan Schinkel

Denedim ama geri aramalar asla yürütülmüyor. Eklenti, hizmet hata verdiğinde bile hizmet yanıtını yeni sekmede açar. Uygulamanın yeni sekme açmasını ve hata atıldığında hizmet yanıtını görüntülemesini istemiyorum. Ben bile başarı ve başarısızlık doğru ve yanlış filedownload belirtmek için çerez ekledi ama yine de yanıt yeni sekmesinde açık oluyor .. bunu düzeltmek için herhangi bir şekilde .. Ben get yöntemi kullanıyorum.
Vishal Gulati

1
@MarkAmery de diğer cevapların belirttiği gibi çalışır. Bu yaklaşım (AFAIK), indirme işleminin ne zaman başladığı, ne zaman tamamlandığı ve hangisinin işe yarayacağı konusunda size geri bildirimde bulunmaz. Bunu "ateşle ve unut" seçeneği için cevaba ekleyebilirim. Ayrıca [download] özelliği POST veya egzotik herhangi bir şeye izin vermez.
John Culviner

142
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();
}

Hedef tarayıcınızın yukarıdaki snippet'i sorunsuz bir şekilde çalıştırıp çalıştırmadığını kontrol edin:
http://caniuse.com/#feat=download


1
indir dosya adı değişmedi ... Nisan ayında krom test 2015
Novellizator

7
Benim için bu mükemmel olurdu, ancak Firefox'ta da çalışmaz. Herhangi bir fikir?
g07kore

2
Caniuse.com/#feat=download öğesinde belirtildiği gibi , bu yalnızca en son Firefox ve Chrome sürümlerindeki aynı kaynaklı bağlantılar için geçerlidir. Dolayısıyla, bağlantılarınız başka bir alana işaret ediyorsa, şimdilik hiçbir yerde pek işe yaramaz.
jean-baptiste

9
Firefox'ta çalışması için document.body.appendChild(link), tıklamadan önce ve tıklamadan sonra link.remove()DOM'u kirletmekten kaçınmak için yapabilirsiniz .
Okku

1
Ayrıca link.download = "", orijinal dosya adını korumasını ve bir tane ayarlamak zorunda kalmamak için de bunu yapabilirsiniz .
Okku

69

Pek çok insanın bir öğenin indirme özelliğini bilmemesine şaşırdım. Lütfen bu konuda sözün yayılmasına yardımcı olun! Gizli bir html bağlantınız olabilir ve sahte bir tıklama yapabilirsiniz. Html bağlantısında indirme özelliği varsa, dosyayı indirir, ne olursa olsun, dosyayı görüntülemez. İşte kod. Bir kedi resmi bulabilirse indirir.

document.getElementById('download').click();
<a href="https://docs.google.com/uc?id=0B0jH18Lft7ypSmRjdWg1c082Y2M" download id="download" hidden></a>

Not: Bu, tüm tarayıcılarda desteklenmez: http://www.w3schools.com/tags/att_a_download.asp


12
IE ve Safari'de desteklenmez
MatPag

9
Chrome indirilir, ancak Firefox sadece resmi gösterir.
Saran

Bu yürütülebilir pasajı sağlamak için +1. Sadece işe yaramayacağını öğrenmek için test etmem için zaman kazandım.
Doopy

4
En son Chrome (Ağu 2018) resmi de gösteriyor (saçma bir güvenlik kısıtlaması nedeniyle) bu yüzden başarısız
user1156544

Chrome mp4s için
indirmiyor

53

JQuery yerine indirmek için downloadözniteliğini kullanmanızı öneririz :

<a href="your_link" download> file_name </a>

Bu, dosyanızı açmadan indirir.


5
Yalnızca Chrome, Firefox, Opera ve IE'yi destekleyecek (> = 13.0)
Kunal Kakkad

Edge> = 13, IE değil. Ayrıca Edge 13 uygulamaları hatalıdır çünkü dosyanın adı yok sayılır ve bunun yerine ad olarak kimliğine sahip bir dosya alırsınız.
David

8
Benim düşünceme göre, bu sorunun doğru cevabı. Diğer yanıtlar, eski tarayıcıları desteklemeniz ve bir geçici çözüme ihtiyacınız olması durumunda anlamlıdır.
crabCRUSHERclamCOLLECTOR

19

Zaten jQuery kullanıyorsanız, daha küçük bir snippet üretmek için avantajından yararlanabilirsiniz
Andrew'in cevabının bir jQuery versiyonu:

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');

FYI, Birisi (yazımı düzenleyerek) $ idown.attr ('src', url) eklemeyi önerdi; iframe'i ilk kez oluşturduktan sonra. Sanırım gerekli olduğunu düşünmüyorum. Oluşturma adımında zaten 'src: url' ayarlanıyor.
corbacho

Ayrıca nihayet IE 9 bir https web içinde olduğunuzda http: // işaret dinamik olarak oluşturulan iframe hoşlanmadığı için bu çözümü kullanmak vermedi yorum. Ben de bazı rahatsızlıkları olan bir çözüm "window.location.href" kullanmak zorunda kaldı
corbacho

"if ($ idown)" kısmı en son Chrome'da (24) benim için çalışmadı, ancak yalnızca sonsuz sayıda iframe oluşturmak işe yaradı. Belki aynı anda 12 şeyi indirmek istediğim için?
nessur

6
ifİfadesi gerçekten olmalıdır:if( $idown && $idown.length > 0 )
iOnline247

3
Chrome'da hiçbir şey yapmaz
jjxtra

11

Chrome, Firefox ve IE8 ve üstü sürümlerde çalışır.

var link=document.createElement('a');
document.body.appendChild(link);
link.href=url ;
link.click();

Bu, DOM'a bağlantı eklemezseniz de çalışır.
Johnie Karr

Sunucudan döndürülen üstbilgiler aksini belirtmedikçe, bu yalnızca urlondan değil, şuraya gider .
Mark Amery

10

Bir kullanarak basit örnek 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;
};

Ardından istediğiniz yerde işlevi çağırın:

downloadURL('path/to/my/file');


10

Başka bir sayfada gezinmeniz gerekmiyorsa bu yararlı olabilir. Bu temel javascript işlevidir, bu yüzden arka ucun Javascript'te olduğu herhangi bir platformda kullanılabilir

window.location.assign('any url or file path')

ContentType'ı kendiniz ayarlayabiliyorsanız, bu muhtemelen en kolay çözümdür. Bunu şu şekilde kullanıyorum: window.location.href = downloadFileUrl;
BluE

Yönetici URL'yi kullanıcıya göstermek istemiyorsa?
Naren Verma

9

Sadece yedi yıl sonra, iframe veya link yerine bir form kullanan tek satırlık bir jQuery çözümü geliyor:

$('<form></form>')
     .attr('action', filePath)
     .appendTo('body').submit().remove();

Bunu test ettim

  • Chrome 55
  • Firefox 50
  • Kenar IE8-10
  • iOS 10 (Safari / Chrome)
  • Android Chrome

Herkes bu çözüm ile herhangi bir olumsuzluk biliyorsa, onları duymak çok mutlu olurdu.


Tam demo:

<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>

7
filePathBir form göndermek, action özniteliğindeki sorgu dizesinin üzerine yazacağından bir sorgu dizeniz varsa bu çalışmaz .
Bobort

1
Forma bir girdi ekleyerek bunu yaptım: var authInput = $("<input>").attr("type", "hidden").attr("name", "myQsKey").val('MyQsValue'); $('<form></form>') .attr('action', filePath) .append($(authInput)) .appendTo('body').submit().remove();Bu eşdeğer erişim:filepath?myQsKey=myValue
Harald Hoerwick

Bu aynı zamanda web soketlerini de kapatır.
radu122

2
Kümesine gerçekten karmaşık bir yol gibi bu görünüyor window.locationiçin filePath. Sadece window.location = filePath;aynısını yapardı.
Ivo Smits

Ne olursa olsun bir var olup olmadığı olumsuz , haddi zatında bu çözüme, herhangi sağlamadıysanız ters bir bağlantının üzerine bu kullanmadan. (Ve bir dezavantajı vardır: downloadözelliği, sunucunun döndürdüğü başlıklar ne olursa olsun, bir aöğe ile yapabileceğinizden bağımsız olarak bir indirme istediğinizi söylemek için tarayıcıya bu şekilde kullanamazsınız .)
Mark Amery

6

Aşağıdaki snippet'i kullanarak sona erdi ve IE'de test edilmemiş çoğu tarayıcıda çalışıyor.

let data = JSON.stringify([{email: "test@domain.com", name: "test"}, {email: "anothertest@example.com", 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();
}

Güncelleme

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);
}

MouseEventHer zaman kullanmak yerine burada kullanmanın anlamı nedir click? Ve neden dokümana bağlantıyı tıklamadan önce eklemelisiniz? Belki bunun stackoverflow.com/a/23013574/1709587'de gösterilen daha basit yaklaşıma göre avantajları vardır , ancak öyleyse burada açıklanmamıştır.
Mark Amery

Bu yanıtı bir süre yayınladım. Bu gereksiz kod satırlarının arkasında herhangi bir sebep olup olmadığını hatırlayamıyorum.
Abk

5

Sorunun çok eski olup olmadığını bilmiyorum, ancak indirme mime türü (örneğin bir zip arşivi) doğru olduğu sürece bir download url'ye window.location ayarını çalıştıracağım.

var download = function(downloadURL) {

   location = downloadURL;

});

download('http://example.com/archive.zip'); //correct usage
download('http://example.com/page.html'); //DON'T

3

Imagine Breaker'ın yanıtını iyileştirmek için, bu FF ve IE'de desteklenir:

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);
}

Başka bir deyişle, sadece kullanmak dispatchEventişlevini yerine click();


Bu nasıl bir gelişme? Aynı şeyi yapmanın daha karmaşık bir yolu gibi görünüyor.
Mark Amery

3

Belki de javascript'inizin, bir indirme bağlantısını yeni bir sekmeye sürüklediğinizde olduğu gibi yalnızca bir dosyayı indiren bir sayfa açmasını sağlayın:

Window.open("https://www.MyServer.
Org/downloads/ardiuno/WgiWho=?:8080")

Açılan pencerede, otomatik olarak kapanan bir indirme sayfası açın.


1
Bu, çoğu tarayıcının engellediği bir açılır pencere oluşturur
Ashton Wiersdorf

3

FireFox, Chrome ve IE Kodu için Veri İndirmek için En Eksiksiz ve Çalışma (Test Edilmiş) Kodu Aşağıdadır. Verilerin texarea alanında olduğunu, id = 'textarea_area' olan ve dosya adının verilerin indirileceği dosyanın adı olduğunu varsayalım .

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();
    }

}

ve sonra sadece ara

<a href="javascript:download();">Download</a>

İndirme Başlatma için.

İndirme iletişim kutusu için doğru MIME türünü ayarlama dizisi aşağıdakiler OLABİLİR:

// ----------------------- 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 --------- //

- Bunu pdf dosyalarıyla deniyordum. Dosya indiriliyor, ancak her zaman bozuk. Herhangi bir öneri? Thank you
Shrivaths Kulkarni

2

benim için bu krom v72 test tamam çalışıyor

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')

Bu, Imagine Breaker'ın yıllar önce verdiği yanıtla aynı yaklaşımdır , ancak jQuery gerektirmenin dezavantajı da vardır.
Mark Amery

1

Her yerde çalıştığı ve geçici olarak sunucuda dosya oluşturmak zorunda olmadığınızdan bir FORM etiketi kullanarak iyi sonuçlar elde ettim. Yöntem böyle çalışır.

İstemci tarafında (sayfa HTML) böyle bir görünmez form oluşturursunuz

<form method="POST" action="/download.php" target="_blank" id="downloadForm">
    <input type="hidden" name="data" id="csv">
</form>

Sonra bu Javascript kodunu düğmenize ekleyin:

$('#button').click(function() {
     $('#csv').val('---your data---');
     $('#downloadForm').submit();
}

Sunucu tarafında aşağıdaki PHP kodu var 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();

Verilerinizin aşağıdaki gibi zip dosyalarını bile oluşturabilirsiniz:

<?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); 

En iyi yanı, her şey anında oluşturulduğundan ve yok edildiğinden sunucunuzda herhangi bir artık dosya bırakmamasıdır!


0

30 Aralık 13'te hitesh tarafından verilen cevap aslında işe yarıyor. Sadece küçük bir ayar gerektirir:

PHP dosyası kendisini çağırabilir. Başka bir deyişle, saveAs.php adlı bir dosya oluşturun ve bu kodu içine koyun ...

        <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;
            }
        }
    ?>

0

Bu işlevler stacktrace.js dosyasında kullanılır :

/**
 * 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 '';
}

Bu ... dosya indirme için değil, sadece XHR için mi görünüyor? Burada alaka düzeyini görmüyorum.
Mark Amery

0

Tıklama etkinliğinden ÖNCE adlı mousedown etkinliğini kullanmanızı öneririm. Bu şekilde, tarayıcı tıklama olayını doğal olarak ele alır ve bu da kod garipliğini önler:

(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);

0

Corbacho'dan mükemmel çözüm, sadece vardan kurtulmak için adapte oldum

function downloadURL(url) {
    if( $('#idown').length ){
        $('#idown').attr('src',url);
    }else{
        $('<iframe>', { id:'idown', src:url }).hide().appendTo('body');
    }
}

0

Firefox ve Chrome test edildi:

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);

Bu aslında firefox için "krom" yol çözümüdür (Diğer tarayıcılarda test edilmedim, bu yüzden lütfen uyumluluk hakkında yorum bırakın)


0

Bir dosyayı indirmeye çalışırken çok fazla küçük şey olabilir. Yalnızca tarayıcılar arasındaki tutarsızlık bir kabustur. Bu harika küçük kütüphaneyi kullandım. https://github.com/rndme/download

Bu konuda güzel bir şey, sadece URL'ler için değil, indirmek istediğiniz istemci tarafı verileri için esnek olmasıdır.

  1. Metin dizesi
  2. metin verisiURL
  3. metin blob
  4. metin dizileri
  5. html dizesi
  6. html damla
  7. ajax geri arama
  8. ikili dosyalar

-1

Ankraj etiketi ve PHP kullanarak yapılabilir, Bu yanıtı kontrol edin

PDF dosyası indirmek için JQuery Ajax çağrısı

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;
}
?>

Dosya boyutunu kontrol ediyorum çünkü CDN bulutundan pdf yüklerseniz, belgeyi 0kb olarak indirmeye zorlayan belgenin boyutunu elde edemezsiniz, Bunu önlemek için bu koşulu kontrol ediyorum

 if($fsize) {//checking if file size exist
      header("Content-length: $fsize");
    }

-1

Partiye geç kaldığımı biliyorum, ama yukarıdaki Imagine Breaker çözümünün bir çeşidi olan çözümümü paylaşmak istiyorum. Çözümünü kullanmaya çalıştım, çünkü çözümü benim için en basit ve kolay görünüyor. Ama diğerleri gibi, bazı tarayıcılar için işe yaramadı, bu yüzden jquery kullanarak üzerine bazı varyasyon koydu.

Umarım bu birisine yardım edebilir.

function download(url) {
  var link = document.createElement("a");
  $(link).click(function(e) {
    e.preventDefault();
    window.location.href = url;
  });
  $(link).click();
}

Tüm bu işlev gövdesi aşırı karmaşık bir yöntemdir window.location.href = url. Oluşturduğunuz bağlantı hiçbir şey için kullanılmaz.
Mark Amery

-1

Not: Tüm tarayıcılarda desteklenmez.

Başından itibaren href özniteliğinde dosya url ayarlamak zorunda kalmadan jquery kullanarak bir dosya indirmek için bir yol arıyordu.

jQuery('<a/>', {
    id: 'downloadFile',
    href: 'http://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon@2.png',
    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>


-1

JQuery olmadan @ rakaloof'un çözümünü kullanıyorum (çünkü burada ihtiyacınız yok ). Fikir için teşekkürler! İşte vanillaJS form tabanlı bir çözüm:

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);

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.