首頁  >  文章  >  web前端  >  用JS在瀏覽器中建立下載檔案_javascript技巧

用JS在瀏覽器中建立下載檔案_javascript技巧

WBOY
WBOY原創
2016-05-16 16:56:49997瀏覽

但受限於瀏覽器,很多情況下我們都只能給個鏈接,讓用戶點擊打開-》另存為。如下面這個連結:

複製程式碼 程式碼如下:

使用者點擊這個連結的時候,瀏覽器會開啟並顯示連結指向的文件內容,顯然,這並沒有實現我們的需求。 HTML5中為a標籤增加了一個download屬性,只要有這個屬性,點擊這個連結時瀏覽器就不在開啟連結指向的文件,而是改為下載(目前只有chrome、firefox和opera支援)。
用JS在瀏覽器中建立下載檔案_javascript技巧

下載時會直接使用連結的名字來當檔名,但是是可以改的,只要給download加上想要的檔名即可,如:download=「not-a-file.js」。
用JS在瀏覽器中建立下載檔案_javascript技巧

但是這樣還不夠,以上的方法只適合用在檔案是在伺服器上的情況。如果在瀏覽器端js產生的內容,想讓瀏覽器進行下載要如何辦到呢?

其實還是有辦法辦到的,相信很多人都多少聽過了DataURI這個詞,比較常見的就是圖片的src,如:

複製程式碼 程式碼如下:

用JS在瀏覽器中建立下載檔案_javascript技巧

DataURI的解釋可以移步這裡,本人就不在解釋了。

那麼,現在要將js產生的內容進行下載就有法可依了。封裝成一個方法如下:

複製程式碼 程式碼如下:

function downloadFile(aLink file , content){

    aLink.download = fileName;
    aLink.href = "data:text/plain," content;
}

呼叫downloadFile之後,使用者點擊鏈接,就能觸發瀏覽器下載。

但是,還不夠,上面的辦法有兩個硬傷,會導致流失很多懶人美眉:

下載的檔案類型限制死了,美眉要下載處理後的果照怎麼辦?
下載還要再點一下,太麻煩啦。
要解決文件類型的問題,可以用瀏覽器的新API(URL.createObjectURL)來解決問題,URL.createObjectURL通常都是用來創建圖片的DataURI用來顯示圖片,這裡用來下載文件,讓瀏覽器來幫我們設定好文件類型。

URL.createObjectURL的參數是File對像或Blob對象,File對像也就是透過input[type=file]選擇的文件,Blob對像是二進位大對象,詳細說明可參考這裡。

現在,我們只要用content創建一個ObjectURL並賦值給aLink即可解決檔案類型的限制問題。
檔案的自動下載也蠻好辦,自己建置一個UI點擊事件,再自動觸發下,就能實現自動下載啦。

現在來看看最終程式碼:

複製程式碼 程式碼如下:
    var aLink = document.createElement('a');

    var blob = new Blob([content]);
    var evt = documop. ("click", false, false);//initEvent 不加後兩個參數在FF下會報錯, 感謝Barret Lee 的回饋
    aLink.download = fileName;
    aLink.href = URL.createObjectUR(🎜>    aLink.href = URL.createObjectUR( blob);
    aLink.dispatchEvent(evt);
}


現在,只要一呼叫downloadFile,檔案就自動下載了,是不是很爽咧,^_^。

註:目​​前(2014-01)Blob和URL.createObjectURL在標準瀏覽器裡面都不再需要加私有前綴,可以放心使用啦啦啦~~如果你不放心,可以查查Can I Use。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn