点击导出按钮弹出文件框导出文件,点击导入选择文件获取文件数据,以下我保存的是json。
html:
<div class="layui-inline"> <div class="layui-btn-group"><button type="button" class="layui-btn layui-btn-normal layui-btn-sm" onclick="exportEditFile()">导入</button><input type="file" id="importEditFile" accept=".json" onchange="uploadEditFile(this)" style="width:0;visibility:hidden;opacity: 0"><button type="button" class="layui-btn layui-btn-normal layui-btn-sm" onclick="importEditFile()">导出</button></div>
</div>//需要引用 FileSaver.js
js:
function SceneFileSaveAs(obj, name) {let content = JSON.stringify(obj, null, 4);let blob = new Blob([content], { type: "text/plain;charset=utf-8" });saveAs(blob, name);
}//导出文件
function exportEditFile() { //文件的json数据let testobj = {"id": 1,"name": "11"};//保存的文件名let fileName = "file_" + localStorage.getItem("ip") + ".json";SceneFileSaveAs(testobj, fileName);
}
//导入文件
function importEditFile() {$("#importEditFile").click();
}
// 导入
function uploadEditFile(input) {//支持chrome IE10let file = input.files[0];//获取读取的File对象let filepath = file.name;//读取选中文件的文件名let filename = file.name.split(".")[0];let size = file.size;//读取选中文件的大小console.log("文件名:" + filepath + "大小:" + size); if (window.FileReader) {console.log("window.FileReader")var reader = new FileReader();console.log(" reader.onload");reader.readAsText(file);//读取文件的内容reader.onload = function () {console.log(" reader.onload----------------")let myresult = this.result;//当读取完成之后会回调这个函数,然后此时文件的内容存储到了result中。直接操作即可。input.value = "";if(isJSON(myresult)){let myresult1 = JSON.parse(myresult);console.log(myresult1);SceneEditSend(myresult1);}else {console.log("文件内容格式异常");}}// reader.readAsText(file);}
}
//拿到json文件里的数据
function SceneEditSend(data) {console.log(data.name);
}
FileSaver.js 框架代码:
/* FileSaver.js* A saveAs() FileSaver implementation.* 2014-11-29** By Eli Grey, http://eligrey.com* License: X11/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// IE 10+ (native saveAs)|| (typeof navigator !== "undefined" &&navigator.msSaveOrOpenBlob && navigator.msSaveOrOpenBlob.bind(navigator))// Everyone else|| (function(view) {"use strict";// IE <10 is explicitly unsupportedif (typeof navigator !== "undefined" &&/MSIE [1-9]\./.test(navigator.userAgent)) {return;}vardoc = 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 = doc.createEvent("MouseEvents");event.initMouseEvent("click", true, false, view, 0, 0, 0, 0, 0, false, false, false, false, 0, null);node.dispatchEvent(event);}, webkit_req_fs = view.webkitRequestFileSystem, req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem, throw_outside = function(ex) {(view.setImmediate || view.setTimeout)(function() {throw ex;}, 0);}, force_saveable_type = "application/octet-stream", fs_min_size = 0// See https://code.google.com/p/chromium/issues/detail?id=375297#c7 and// https://github.com/eligrey/FileSaver.js/commit/485930a#commitcomment-8768047// for the reasoning behind the timeout and revocation flow, arbitrary_revoke_timeout = 500 // in ms, revoke = function(file) {var revoker = function() {if (typeof file === "string") { // file is an object URLget_URL().revokeObjectURL(file);} else { // file is a Filefile.remove();}};if (view.chrome) {revoker();} else {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);}}}}, FileSaver = function(blob, name) {// First try a.download, then web filesystem, then object URLsvarfilesaver = this, type = blob.type, blob_changed = false, object_url, target_view, dispatch_all = function() {dispatch(filesaver, "writestart progress write writeend".split(" "));}// on any filesys errors revert to saving with object URLs, fs_error = function() {// don't create more object URLs than neededif (blob_changed || !object_url) {object_url = get_URL().createObjectURL(blob);}if (target_view) {target_view.location.href = object_url;} else {var new_tab = view.open(object_url, "_blank");if (new_tab == undefined && typeof safari !== "undefined") {//Apple do not allow window.open, see http://bit.ly/1kZffRIview.location.href = object_url}}filesaver.readyState = filesaver.DONE;dispatch_all();revoke(object_url);}, abortable = function(func) {return function() {if (filesaver.readyState !== filesaver.DONE) {return func.apply(this, arguments);}};}, create_if_not_found = {create: true, exclusive: false}, slice;filesaver.readyState = filesaver.INIT;if (!name) {name = "download";}if (can_use_save_link) {object_url = get_URL().createObjectURL(blob);save_link.href = object_url;save_link.download = name;click(save_link);filesaver.readyState = filesaver.DONE;dispatch_all();revoke(object_url);return;}// Object and web filesystem URLs have a problem saving in Google Chrome when// viewed in a tab, so I force save with application/octet-stream// http://code.google.com/p/chromium/issues/detail?id=91158// Update: Google errantly closed 91158, I submitted it again:// https://code.google.com/p/chromium/issues/detail?id=389642if (view.chrome && type && type !== force_saveable_type) {slice = blob.slice || blob.webkitSlice;blob = slice.call(blob, 0, blob.size, force_saveable_type);blob_changed = true;}// Since I can't be sure that the guessed media type will trigger a download// in WebKit, I append .download to the filename.// https://bugs.webkit.org/show_bug.cgi?id=65440if (webkit_req_fs && name !== "download") {name += ".download";}if (type === force_saveable_type || webkit_req_fs) {target_view = view;}if (!req_fs) {fs_error();return;}fs_min_size += blob.size;req_fs(view.TEMPORARY, fs_min_size, abortable(function(fs) {fs.root.getDirectory("saved", create_if_not_found, abortable(function(dir) {var save = function() {dir.getFile(name, create_if_not_found, abortable(function(file) {file.createWriter(abortable(function(writer) {writer.onwriteend = function(event) {target_view.location.href = file.toURL();filesaver.readyState = filesaver.DONE;dispatch(filesaver, "writeend", event);revoke(file);};writer.onerror = function() {var error = writer.error;if (error.code !== error.ABORT_ERR) {fs_error();}};"writestart progress write abort".split(" ").forEach(function(event) {writer["on" + event] = filesaver["on" + event];});writer.write(blob);filesaver.abort = function() {writer.abort();filesaver.readyState = filesaver.DONE;};filesaver.readyState = filesaver.WRITING;}), fs_error);}), fs_error);};dir.getFile(name, {create: false}, abortable(function(file) {// delete file if it already existsfile.remove();save();}), abortable(function(ex) {if (ex.code === ex.NOT_FOUND_ERR) {save();} else {fs_error();}}));}), fs_error);}), fs_error);}, FS_proto = FileSaver.prototype, saveAs = function(blob, name) {return new FileSaver(blob, name);};FS_proto.abort = function() {var filesaver = this;filesaver.readyState = filesaver.DONE;dispatch(filesaver, "abort");};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 !== null) {module.exports = saveAs;
} else if ((typeof define !== "undefined" && define !== null) && (define.amd != null)) {define([], function() {return saveAs;});
}