本文實(shí)例講述了JS基于FileSaver.js插件實(shí)現(xiàn)文件保存功能。分享給大家供大家參考,具體如下:
這里介紹一款js插件用法非常簡(jiǎn)單,先來(lái)看看FileSaver.js插件源碼:
格式化后的代碼如下:
/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */var saveAs = saveAs ||function(e) {  "use strict";  if (typeof navigator !== "undefined" && /MSIE [1-9]/./.test(navigator.userAgent)) {    return  }  var t = e.document,  n = function() {    return e.URL || e.webkitURL || e  },  r = t.createElementNS("http://www.w3.org/1999/xhtml", "a"),  i = "download" in r,  o = function(e) {    var t = new MouseEvent("click");    e.dispatchEvent(t)  },  a = /Version//[/d/.]+.*Safari/.test(navigator.userAgent),  f = e.webkitRequestFileSystem,  u = e.requestFileSystem || f || e.mozRequestFileSystem,  s = function(t) { (e.setImmediate || e.setTimeout)(function() {      throw t    },    0)  },  c = "application/octet-stream",  d = 0,  l = 500,  w = function(t) {    var r = function() {      if (typeof t === "string") {        n().revokeObjectURL(t)      } else {        t.remove()      }    };    if (e.chrome) {      r()    } else {      setTimeout(r, l)    }  },  p = function(e, t, n) {    t = [].concat(t);    var r = t.length;    while (r--) {      var i = e["on" + t[r]];      if (typeof i === "function") {        try {          i.call(e, n || e)        } catch(o) {          s(o)        }      }    }  },  v = function(e) {    if (/^/s*(?:text///S*|application//xml|/S*///S*/+xml)/s*;.*charset/s*=/s*utf-8/i.test(e.type)) {      return new Blob(["/ufeff", e], {        type: e.type      })    }    return e  },  y = function(t, s, l) {    if (!l) {      t = v(t)    }    var y = this,    m = t.type,    S = false,    h, R, O = function() {      p(y, "writestart progress write writeend".split(" "))    },    g = function() {      if (R && a && typeof FileReader !== "undefined") {        var r = new FileReader;        r.onloadend = function() {          var e = r.result;          R.location.href = "data:attachment/file" + e.slice(e.search(/[,;]/));          y.readyState = y.DONE;          O()        };        r.readAsDataURL(t);        y.readyState = y.INIT;        return      }      if (S || !h) {        h = n().createObjectURL(t)      }      if (R) {        R.location.href = h      } else {        var i = e.open(h, "_blank");        if (i == undefined && a) {          e.location.href = h        }      }      y.readyState = y.DONE;      O();      w(h)    },    b = function(e) {      return function() {        if (y.readyState !== y.DONE) {          return e.apply(this, arguments)        }      }    },    E = {      create: true,      exclusive: false    },    N;    y.readyState = y.INIT;    if (!s) {      s = "download"    }    if (i) {      h = n().createObjectURL(t);      r.href = h;      r.download = s;      setTimeout(function() {        o(r);        O();        w(h);        y.readyState = y.DONE      });      return    }    if (e.chrome && m && m !== c) {      N = t.slice || t.webkitSlice;      t = N.call(t, 0, t.size, c);      S = true    }    if (f && s !== "download") {      s += ".download"    }    if (m === c || f) {      R = e    }    if (!u) {      g();      return    }    d += t.size;    u(e.TEMPORARY, d, b(function(e) {      e.root.getDirectory("saved", E, b(function(e) {        var n = function() {          e.getFile(s, E, b(function(e) {            e.createWriter(b(function(n) {              n.onwriteend = function(t) {                R.location.href = e.toURL();                y.readyState = y.DONE;                p(y, "writeend", t);                w(e)              };              n.onerror = function() {                var e = n.error;                if (e.code !== e.ABORT_ERR) {                  g()                }              };              "writestart progress write abort".split(" ").forEach(function(e) {                n["on" + e] = y["on" + e]              });              n.write(t);              y.abort = function() {                n.abort();                y.readyState = y.DONE              };              y.readyState = y.WRITING            }), g)          }), g)        };        e.getFile(s, {          create: false        },        b(function(e) {          e.remove();          n()        }), b(function(e) {          if (e.code === e.NOT_FOUND_ERR) {            n()          } else {            g()          }        }))      }), g)    }), g)  },  m = y.prototype,  S = function(e, t, n) {    return new y(e, t, n)  };  if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {    return function(e, t, n) {      if (!n) {        e = v(e)      }      return navigator.msSaveOrOpenBlob(e, t || "download")    }  }  m.abort = function() {    var e = this;    e.readyState = e.DONE;    p(e, "abort")  };  m.readyState = m.INIT = 0;  m.WRITING = 1;  m.DONE = 2;  m.error = m.onwritestart = m.onprogress = m.onwrite = m.onabort = m.onerror = m.onwriteend = null;  return S} (typeof self !== "undefined" && self || typeof window !== "undefined" && window || this.content);if (typeof module !== "undefined" && module.exports) {  module.exports.saveAs = saveAs} else if (typeof define !== "undefined" && define !== null && define.amd != null) {  define([],  function() {    return saveAs  })}使用的時(shí)候非常簡(jiǎn)單,代碼如下所示:
var blob = new Blob(['out_put_string'], {type: "text/plain;charset=utf-8"});//out_put_string為需要保存到文件的字符串內(nèi)容saveAs(blob, "filename.php");//filename.php為保存的文件名希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答