使用js生成文件并下載

使用Javascript生成和下載文件狈孔?如果考慮到這一點,這并不像您想的那樣安全惧磺,如果沒有用戶交互,就不應該允許這樣做(但是現在允許)捻撑。假設您使用了GoogleChrome磨隘,并且啟用了“自動打開下載的文件”選項,而由于運氣不好顾患,您輸入一個惡意網站并生成一個未知文件的下載番捂。你知道這個故事的結局。然而江解,在最新的瀏覽器中设预,不知道或很少下載的文件擴展名會被阻止,如果您真的想打開該文件(在Chrome中是較少的)犁河,則會出現一個提示鳖枕。因此,文件的自動下載在最近幾年一直難以實現呼股,但是現在隨著HTML 5的引入耕魄,這個任務變得更加容易實現。在這篇文章中彭谁,我們將向您展示一些使用純Javascript直接生成和下載文件的技巧吸奴。

Self-implemented download function(自己實現下載函數)

下面的簡單函數允許您直接在瀏覽器中生成文件,而無需接觸任何服務器缠局。它適用于所有HTML5就緒的瀏覽器则奥,因為它使用了<a>的下載屬性:

function download(filename, text) {
  var element = document.createElement('a');
  element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
  element.setAttribute('download', filename);

  element.style.display = 'none';
  document.body.appendChild(element);

  element.click();

  document.body.removeChild(element);
}

調用download("hello.txt","This is the content of my file :)");即可

下載屬性指定當用戶單擊超鏈接時將下載目標。只有在設置href屬性時才使用此屬性狭园。

Using a library(使用庫)

創(chuàng)建庫读处,FileSaver.js在不支持saveAs()的FileSaver接口的瀏覽器中實現它。如果您需要保存更大的文件唱矛,或者BLOB的大小限制罚舱,或者沒有足夠的內存,那么請看一看更高級的StreamSaver.js绎谦,它可以使用新的StreamsAPI的強大功能將數據直接異步保存到硬盤中管闷。同時支持進度查看,取消和何時完成窃肠。
下面的代碼段允許您生成一個文件(具有任何擴展名)并下載它包个,而無需鏈接任何服務器:

var content = "What's up , hello world";
// any kind of extension (.txt,.cpp,.cs,.bat)
var filename = "hello.txt";

var blob = new Blob([content], {
 type: "text/plain;charset=utf-8"
});

saveAs(blob, filename);

下表顯示了FileSaver.js在不同瀏覽器中的兼容性:

Browser Constructs as Filenames Max Blob Size Dependencies
Firefox 20+ Blob Yes 800 MiB None
Firefox < 20 data: URI No n/a Blob.js
Chrome Blob Yes [500 MiB][3] None
Chrome for Android Blob Yes [500 MiB][3] None
Edge Blob Yes ? None
IE 10+ Blob Yes 600 MiB None
Opera 15+ Blob Yes 500 MiB None
Opera < 15 data: URI No n/a Blob.js
Safari 6.1+* Blob No ? None
Safari < 6 data: URI No n/a Blob.js
Safari 10.1+ Blob Yes n/a None

注意: 盡管它支持最新的瀏覽器,但您需要了解幾個技巧才能更好運用冤留。

IE < 10

It is possible to save text files in IE < 10 without Flash-based polyfills.
See ChenWenBrian and koffsyrup's saveTextAs() for more details.

Safari 6.1+

Blobs may be opened instead of saved sometimes—you may have to direct your Safari users to manually
press <kbd>?</kbd>+<kbd>S</kbd> to save the file after it is opened. Using the application/octet-stream MIME type to force downloads can cause issues in Safari.

iOS

saveAs must be run within a user interaction event such as onTouchDown or onClick; setTimeout will prevent saveAs from triggering. Due to restrictions in iOS saveAs opens in a new window instead of downloading, if you want this fixed please tell Apple how this bug is affecting you.

下面三個就不翻譯了碧囊,一來不影響使用树灶,二來我沒有看里面內容:blush::blush::blush:


本文為英文翻譯過來,原文鏈接:如何在瀏覽器中使用JavaScript創(chuàng)建下載文件

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末糯而,一起剝皮案震驚了整個濱河市天通,隨后出現的幾起案子,更是在濱河造成了極大的恐慌歧蒋,老刑警劉巖土砂,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異谜洽,居然都是意外死亡萝映,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門阐虚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來序臂,“玉大人,你說我怎么就攤上這事实束“赂眩” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵咸灿,是天一觀的道長构订。 經常有香客問我,道長避矢,這世上最難降的妖魔是什么悼瘾? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮审胸,結果婚禮上亥宿,老公的妹妹穿的比我還像新娘。我一直安慰自己砂沛,他們只是感情好烫扼,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著碍庵,像睡著了一般映企。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上静浴,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天卑吭,我揣著相機與錄音,去河邊找鬼马绝。 笑死,一個胖子當著我的面吹牛挣菲,可吹牛的內容都是我干的富稻。 我是一名探鬼主播掷邦,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼椭赋!你這毒婦竟也來了抚岗?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤哪怔,失蹤者是張志新(化名)和其女友劉穎宣蔚,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體认境,經...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡胚委,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了叉信。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亩冬。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖硼身,靈堂內的尸體忽然破棺而出硅急,到底是詐尸還是另有隱情,我是刑警寧澤佳遂,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布营袜,位于F島的核電站,受9級特大地震影響丑罪,放射性物質發(fā)生泄漏荚板。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一巍糯、第九天 我趴在偏房一處隱蔽的房頂上張望啸驯。 院中可真熱鬧,春花似錦祟峦、人聲如沸罚斗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽针姿。三九已至,卻和暖如春厌衙,著一層夾襖步出監(jiān)牢的瞬間距淫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工婶希, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留榕暇,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像彤枢,于是被迫代替她去往敵國和親狰晚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理缴啡,服務發(fā)現壁晒,斷路器,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 用到的組件 1业栅、通過CocoaPods安裝 2秒咐、第三方類庫安裝 3、第三方服務 友盟社會化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 14,604評論 1 180
  • 6月6日在佛山南海桂城平洲一宗5.51萬平方米的住宅用地拍賣中,萬科給出了最令競爭對手膽寒的報價:持有這塊地上所有...
    房樂我愛吃小包知閱讀 187評論 0 0
  • 槐蕊浮香枕上聞娘汞,流鶯啼夢了無痕歹茶。深山古寺飄花絮,碧水清江曳柳魂你弦。 常醉酒惊豺,厭芳尊,一彎殘月入黃昏禽作。高樓...
    溪風零落閱讀 459評論 0 1
  • 被一束陽光吻醒 忘了睡夢中狂風驟雨 街上的人兒都洗澡似的清清爽爽 樹葉兒抹上面霜 看著油光發(fā)亮—— 我的深度近視竟...
    8fce87c58ed0閱讀 131評論 0 0