html5实现文件读取、编辑、保存

html5实现文件读取、编辑、保存

原文链接:html5实现文件读取保存
HTML5读取文件主要利用的就是FileReader这个API,它的使用需要从一个构造函数开始:

var reader = new FileReader(); // 返回一个FileReader实例

其余部分详见原文链接,本文主要记载将js进行保存,将文件导出成word。

HTML5保存文件

保存文件的关键是生成文件对象,可以使用URL.createObjectURL()方法实现,该方法能返回给定对象的URL,用在标签的href属性上就可以创建可下载的文件链接。

 let DownloadDom = document.getElementById("Download");      // a标签
 DownloadDom.href = window.URL.createObjectURL(myBlob);      // 生成下载链接

createObjectURL()方法的参数可以是File对象或者Blob对象,前端保存文件通常是希望将已有“内容”保存成文件,这种场景我们需要的是Blob对象。

Blob构造函数可以根据传入的数组数据返回Blob对象,数组可以是ArrayBuffer、ArrayBufferView、Blob、DOMString,假如我们希望将一段JSON字符串保存成JSON文件,那么可以这么做:

let myBlob = new Blob(['{"hello":"world"}'], { type: "application/json" });     //Blob对象

关于Blob构造函数的详细用法可以从这里了解。

有了createObjectURL和Blob,实际上,我们就可以封装一个方法,将任意字符串保存成文件,并点击链接下载:

let saveFile = function(fileText) {
    let DownloadDom = document.getElementById("Download");
    if (this.DownloadDom) {
        let myBlob = new Blob([fileText], { type: "application/json" });
        this.DownloadDom.href = window.URL.createObjectURL(myBlob);
        console.log('下载文件已就绪')
    }
},

结合HTML5读取文本文件功能,我们还可以实现对文本文件的编辑功能,比如JSON文件压缩,实际上就是拿到文本内容后,对内容过滤空字符:

let fileText = reader.result;
fileText.replace(/\s/g, "");
saveFile(fileText)

再补充一点内容,createObjectURL()方法还有一个对应的URL.revokeObjectURL()方法,用来释放生成的URL对象,用法是这样的:

var obj_url = window.URL.createObjectURL(blob);
var iframe = document.getElementById('viewer');
iframe.setAttribute('src', obj_url);
window.URL.revokeObjectURL(obj_url);

当obj_url已经赋值给图片之后,就可以释放这个URL对象。这里的关键在于确定URL对象已经使用完了,在我们的例子中如果也这么做,实际上是不行的,当用户点击下载链接的时候会提示网络错误,因为href指向的链接已经失效了。猜测原因是,图片加载并显示的时候已经将数据载入内存了,这时候释放URL不会影响到图片的显示;而链接地址属于“引用”,点击瞬间会去访问URL对象,如果这时候对象已经释放了就会导致链接失效。

前端路上原创技术文章,转载请注明出处:https://refined-x.com/2018/09/03/HTML5实现文件读取、编辑、保存/

实现这个功能,可以使用HTML5的File API和一些JavaScript代码。 首先,在HTML中创建一个按钮来触发文件选择器: ``` <button onclick="openFile()">选择文件</button> ``` 然后,在JavaScript中实现openFile()函数,用来打开文件选择器并获取选中的文件: ``` function openFile() { var input = document.createElement('input'); input.type = 'file'; input.onchange = function(event) { var file = event.target.files[0]; loadFile(file); }; input.click(); } ``` 接下来,实现loadFile()函数来读取文件内容并显示在页面上: ``` function loadFile(file) { var reader = new FileReader(); reader.onload = function(event) { var content = event.target.result; var textarea = document.createElement('textarea'); textarea.value = content; document.body.appendChild(textarea); }; reader.readAsText(file); } ``` 现在,用户选择文件后,文件内容将会显示在一个文本区域中。 最后,添加一个保存按钮来允许用户保存修改后的文件内容: ``` <button onclick="saveFile()">保存</button> ``` 实现saveFile()函数来将修改后的内容保存回原文件: ``` function saveFile() { var textarea = document.querySelector('textarea'); var content = textarea.value; var blob = new Blob([content], {type: 'text/plain'}); var url = URL.createObjectURL(blob); var a = document.createElement('a'); a.download = 'filename.txt'; a.href = url; a.click(); } ``` 这个函数将修改后的内容保存为一个新的Blob对象,然后创建一个下载链接并模拟点击下载链接来保存文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值