前端 实现浏览器读写本地文件(适配HTML,VUE,react)

06-01 1246阅读

1. 读取本地文件

方法1:

1. 使用input标签获取本地文件对象file(vue格式)

 

2. 接收回调处理获取到的文件数据

// 使用前端原生组件回调获取文件
selectFail(event) {
    // 获取文件对象
    const file = event.target.files[0];
    if (file) {
        const reader = new FileReader();
        reader.onload = (e) => {
            // 解析文件内容
            try {
                this.msg = e.target.result
            } catch (err) {
                console.log('无法解析文件', err)
            }
​
        };
    }
}
方法2

1. 使用浏览器API:window.showOpenFilePicker,注意文件选择 必须由用户的 交互动作 触发,不能直接调用

读取本地文件

2.  获取文件对象并处理数据

// 调用浏览器方法获取文件对象
async selectFail2() {
    try {
        // 获取当前选择的文件
        const [fileHandle] = await window.showOpenFilePicker();
        // 存储当前选择的文件(用户后续直接保存时直接找到被保存的对应文件)
        this.fileHandle = fileHandle
        // 获取文件内容
        const file = await this.fileHandle.getFile();
        const contents = await file.text();
        this.msg = contents;
    } catch (error) {
        console.error('无法选择文件', error);
    }
}

2. 保存(修改原文件内容)

保存
// 保存文件
async saveFail() {
    // (对之前获取的文件)执行写入操作
    const writable = await this.fileHandle.createWritable();
    // 写入内容:this.msg
    await writable.write(this.msg);
    // 写入结束
    await writable.close();
}

3. 另存为

另存为
// 另存为
async saveAsFail() {
    // 新建文件参数
    const opts = {
        type: 'save-file',  // 指定文件选择器的类型,'save-file' 表示文件选择器用于 保存文件
        accepts: [{
            description: 'Text file',   // 在文件选择器中显示文件类型的名称
            extensions: ['txt'],        // 文件拓展名
            mimeTypes: ['text/plain'],  // 文件的 MIME 类型
        }]
    };
    // 新建文件
    const fileHandle = await window.showSaveFilePicker(opts);
    // 对新建的文件执行写入操作
    const writable = await fileHandle.createWritable();
    // 写入内容:this.msg
    await writable.write(this.msg);
    // 写入结束
    await writable.close();
}

4. 完整代码及演示

    
         
        读取本地文件 
​
        保存
        另存为
        
            
        
    

​

​
export default {
    data() {
        return {
            msg: '',        // 展示读取的文件内容
            fileHandle: null,   // 当前正在处理的文件句柄(可以理解为正在处理的文件)
        }
    },
    methods: {
        // 文件上传方法1
        selectFail(event) {
            const file = event.target.files[0];
            if (file) {
                const reader = new FileReader();
                reader.onload = (e) => {
                    try {
                        this.msg = e.target.result;
                    } catch (err) {
                        console.log('无法解析JSON文件', err)
                    }
​
                };
                reader.readAsText(file);
            }
        },
        // 文件上传方法2
        async selectFail2() {
            try {
                const [fileHandle] = await window.showOpenFilePicker();
                this.fileHandle = fileHandle
                const file = await this.fileHandle.getFile();
                const contents = await file.text();
                this.msg = contents;
            } catch (error) {
                console.error('无法选择文件', error);
            }
        },
        // 保存文件
        async saveFail() {
            const writable = await this.fileHandle.createWritable();
            await writable.write(this.msg);
            await writable.close();
        },
        // 另存为
        async saveAsFail() {
            const opts = {
                type: 'save-file',
                accepts: [{
                    description: 'Text file',
                    extensions: ['txt'],
                    mimeTypes: ['text/plain'],
                }]
            };
            // 新建文件的句柄
            const fileHandle = await window.showSaveFilePicker(opts);
            const writable = await fileHandle.createWritable();
            await writable.write(this.msg);
            await writable.close();
        }
    }
}

前端 实现浏览器读写本地文件(适配HTML,VUE,react)

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码