亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

JavaScript實現寫入文件到本地的方法【基于FileSaver.js插件】

2024-05-06 16:43:08
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript實現寫入文件到本地的方法。分享給大家供大家參考,具體如下:

工作中有時需要通過 JavaScript 保存文件到本地,我們都知道 JavaScript 基于安全的考慮,是不允許直接操作本地文件的。

IE 可以通過 VB 插件的方式進行,而 Chrome 和 firefox 都不支持 JavaScript 向本地寫入文件,所以 VB 插件的方式存在兼容性問題。

那有沒有適合的方法呢?答案是肯定的,我們可以通過 FileSaver.js 這個小插件實現我們的需求。下面看一段具體的代碼吧:

/** * 下載文件 */var downloadTextFile = function(mobileCode) {  if(isEmpty(mobileCode)) {    mobileCode = '';  }  var file = new File([mobileCode], "手機號.txt", { type: "text/plain;charset=utf-8" });  saveAs(file);}

這個示例是向本地存儲一個名字叫“手機號.txt”的文本文件,采用的字符編碼格式為“UTF-8”,這樣就避免的中文亂碼的問題。聰明的你也趕快試試吧!

附 FileSaver.js 文件的完整源碼:

/* FileSaver.js * A saveAs() FileSaver implementation. * 1.3.2 * 2016-06-16 18:25:19 * * By Eli Grey, http://eligrey.com * License: MIT *  See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md *//*global self *//*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true *//*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */var saveAs = saveAs || (function(view) {  "use strict";  // IE <10 is explicitly unsupported  if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]/./.test(navigator.userAgent)) {    return;  }  var     doc = view.document     // only get URL when necessary in case Blob.js hasn't overridden it yet    , get_URL = function() {      return view.URL || view.webkitURL || view;    }    , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")    , can_use_save_link = "download" in save_link    , click = function(node) {      var event = new MouseEvent("click");      node.dispatchEvent(event);    }    , is_safari = /constructor/i.test(view.HTMLElement) || view.safari    , is_chrome_ios =/CriOS//[/d]+/.test(navigator.userAgent)    , throw_outside = function(ex) {      (view.setImmediate || view.setTimeout)(function() {        throw ex;      }, 0);    }    , force_saveable_type = "application/octet-stream"    // the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to    , arbitrary_revoke_timeout = 1000 * 40 // in ms    , revoke = function(file) {      var revoker = function() {        if (typeof file === "string") { // file is an object URL          get_URL().revokeObjectURL(file);        } else { // file is a File          file.remove();        }      };      setTimeout(revoker, arbitrary_revoke_timeout);    }    , dispatch = function(filesaver, event_types, event) {      event_types = [].concat(event_types);      var i = event_types.length;      while (i--) {        var listener = filesaver["on" + event_types[i]];        if (typeof listener === "function") {          try {            listener.call(filesaver, event || filesaver);          } catch (ex) {            throw_outside(ex);          }        }      }    }    , auto_bom = function(blob) {      // prepend BOM for UTF-8 XML and text/* types (including HTML)      // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF      if (/^/s*(?:text///S*|application//xml|/S*///S*/+xml)/s*;.*charset/s*=/s*utf-8/i.test(blob.type)) {        return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});      }      return blob;    }    , FileSaver = function(blob, name, no_auto_bom) {      if (!no_auto_bom) {        blob = auto_bom(blob);      }      // First try a.download, then web filesystem, then object URLs      var         filesaver = this        , type = blob.type        , force = type === force_saveable_type        , object_url        , dispatch_all = function() {          dispatch(filesaver, "writestart progress write writeend".split(" "));        }        // on any filesys errors revert to saving with object URLs        , fs_error = function() {          if ((is_chrome_ios || (force && is_safari)) && view.FileReader) {            // Safari doesn't allow downloading of blob urls            var reader = new FileReader();            reader.onloadend = function() {              var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');              var popup = view.open(url, '_blank');              if(!popup) view.location.href = url;              url=undefined; // release reference before dispatching              filesaver.readyState = filesaver.DONE;              dispatch_all();            };            reader.readAsDataURL(blob);            filesaver.readyState = filesaver.INIT;            return;          }          // don't create more object URLs than needed          if (!object_url) {            object_url = get_URL().createObjectURL(blob);          }          if (force) {            view.location.href = object_url;          } else {            var opened = view.open(object_url, "_blank");            if (!opened) {              // Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html              view.location.href = object_url;            }          }          filesaver.readyState = filesaver.DONE;          dispatch_all();          revoke(object_url);        }      ;      filesaver.readyState = filesaver.INIT;      if (can_use_save_link) {        object_url = get_URL().createObjectURL(blob);        setTimeout(function() {          save_link.href = object_url;          save_link.download = name;          click(save_link);          dispatch_all();          revoke(object_url);          filesaver.readyState = filesaver.DONE;        });        return;      }      fs_error();    }    , FS_proto = FileSaver.prototype    , saveAs = function(blob, name, no_auto_bom) {      return new FileSaver(blob, name || blob.name || "download", no_auto_bom);    }  ;  // IE 10+ (native saveAs)  if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {    return function(blob, name, no_auto_bom) {      name = name || blob.name || "download";      if (!no_auto_bom) {        blob = auto_bom(blob);      }      return navigator.msSaveOrOpenBlob(blob, name);    };  }  FS_proto.abort = function(){};  FS_proto.readyState = FS_proto.INIT = 0;  FS_proto.WRITING = 1;  FS_proto.DONE = 2;  FS_proto.error =  FS_proto.onwritestart =  FS_proto.onprogress =  FS_proto.onwrite =  FS_proto.onabort =  FS_proto.onerror =  FS_proto.onwriteend =    null;  return saveAs;}(    typeof self !== "undefined" && self  || typeof window !== "undefined" && window  || this.content));// `self` is undefined in Firefox for Android content script context// while `this` is nsIContentFrameMessageManager// with an attribute `content` that corresponds to the windowif (typeof module !== "undefined" && module.exports) { module.exports.saveAs = saveAs;} else if ((typeof define !== "undefined" && define !== null) && (define.amd !== null)) { define("FileSaver.js", function() {  return saveAs; });}

希望本文所述對大家JavaScript程序設計有所幫助。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美不卡视频一区发布| 久久久久久久久91| 欧美日本高清视频| 中文字幕亚洲一区二区三区| 亚洲男人的天堂网站| 亚洲字幕在线观看| 亚洲影视九九影院在线观看| 97超碰色婷婷| 亚洲欧美精品在线| 欧洲s码亚洲m码精品一区| 成人精品一区二区三区| 成人精品在线观看| 北条麻妃久久精品| 国产精品久久久久久久一区探花| 欧美性色xo影院| 少妇高潮久久77777| 日本91av在线播放| 97超级碰在线看视频免费在线看| 国自在线精品视频| 俺也去精品视频在线观看| 中文字幕v亚洲ⅴv天堂| 疯狂做受xxxx欧美肥白少妇| 成人在线视频网站| 久久久精品一区| 中文字幕精品国产| 91sa在线看| 91在线直播亚洲| 欧美激情精品久久久| 中文国产成人精品久久一| 久久久久久18| 91久久精品国产91久久性色| 色阁综合伊人av| 国产在线高清精品| 欧美电影在线播放| 成人免费淫片视频软件| 日韩欧美精品免费在线| 中文亚洲视频在线| 中文字幕国产精品| 日韩精品中文字| 成人女保姆的销魂服务| 欧洲午夜精品久久久| 欧美放荡办公室videos4k| 国内自拍欧美激情| 亚洲专区在线视频| 91理论片午午论夜理片久久| 日韩av在线一区二区| 欧美日韩在线免费| 91视频国产高清| 成人激情综合网| 亚洲国产精品久久久久秋霞蜜臀| 国产男女猛烈无遮挡91| 91精品视频播放| 欧美激情a∨在线视频播放| 国产一区二区动漫| 亚洲男女性事视频| 高清一区二区三区四区五区| 日韩性生活视频| 欧美激情精品久久久久久黑人| 69久久夜色精品国产69| 精品视频久久久久久久| 国产精品成人观看视频国产奇米| 色av中文字幕一区| 美女福利视频一区| 亚洲激情免费观看| 国产成人一区二区在线| 久久久久99精品久久久久| 亚洲社区在线观看| www.国产一区| 久久亚洲精品视频| 久久激情五月丁香伊人| 亚洲福利小视频| 亚洲第一偷拍网| 亚洲欧美综合区自拍另类| 精品电影在线观看| 成人激情在线播放| 亚洲国产黄色片| 成人午夜一级二级三级| 亚洲综合成人婷婷小说| 91免费在线视频| 欧美午夜片在线免费观看| 国产69久久精品成人看| 日韩女优人人人人射在线视频| 欧美多人爱爱视频网站| 国产精品高清免费在线观看| 国产欧美精品一区二区三区介绍| 亚洲网站在线看| 2019国产精品自在线拍国产不卡| 亚洲综合中文字幕68页| 久久精品成人动漫| 欧美久久精品午夜青青大伊人| 91精品美女在线| 欧美色视频日本版| 高清亚洲成在人网站天堂| 亚洲人成自拍网站| 欧美贵妇videos办公室| 国产丝袜一区二区三区免费视频| 日韩av在线网址| 一本色道久久综合狠狠躁篇怎么玩| 色悠久久久久综合先锋影音下载| 日av在线播放中文不卡| 久久夜色精品国产| 动漫精品一区二区| www.日韩.com| 国产精品久久久久久一区二区| 日韩欧美精品在线观看| 国产在线999| 国产精品99久久久久久白浆小说| 欧美大片免费观看在线观看网站推荐| 一本色道久久综合亚洲精品小说| 97av在线视频免费播放| 国模精品视频一区二区三区| 国产精品专区h在线观看| 国产成人精品日本亚洲专区61| 成人两性免费视频| 国产a级全部精品| 久久夜色精品亚洲噜噜国产mv| 亚洲free性xxxx护士白浆| 疯狂做受xxxx高潮欧美日本| 奇米一区二区三区四区久久| 久久久久久欧美| 欧美在线观看www| 国产美女精品免费电影| 日本久久久久亚洲中字幕| 亚洲福利精品在线| 久久久久久久激情视频| 欧美一性一乱一交一视频| 国产在线视频不卡| 国产精品精品国产| 国产91精品久久久| 日本在线观看天堂男亚洲| 国产精品高潮呻吟久久av黑人| 久久精品国亚洲| 国产精品色婷婷视频| 亚洲自拍高清视频网站| 欧美激情在线观看视频| 久久国产精品久久久久久久久久| 欧美日韩免费区域视频在线观看| 亚洲日韩中文字幕在线播放| 国产一区二区欧美日韩| 精品成人在线视频| 国产成人av网址| 91福利视频在线观看| 色综久久综合桃花网| 久久精品国产一区二区三区| 久久精品亚洲热| 午夜精品视频在线| 亚洲欧美国产精品va在线观看| 国产视频欧美视频| 国外色69视频在线观看| 欧美成人免费全部观看天天性色| www.欧美精品| 91久久久久久久久久| 国产精品无av码在线观看| 精品国产自在精品国产浪潮| 欧美制服第一页| 亚洲福利在线视频| 欧美成人黄色小视频| 国产最新精品视频| 欧美国产极速在线| 国产精品成熟老女人| 日韩在线一区二区三区免费视频| 伊人久久精品视频| 国产综合香蕉五月婷在线| 欧美中在线观看|