前端读取文件当文件选择相同文件名的文件,内容不会变化

前端读取文件当文件选择相同文件名的文件,内容不会变化

今天遇到个奇怪的bug,使用打开文件,并选择文件时,正常情况会读取文件信息。

但是如果先选择相同的文件名,则内容不会发生变化。

先说结论

只要不使用事件中event.target.files[0]event事件即可。

js 复制代码
// 前端读取文件当文件选择相同文件名的文件,内容不会变化

// 问题描述:当选择相同文件名的文件时,内容不会发生变化。

// 解决方案:避免使用 event.target.files[0],直接读取 fileInput.value.files[0]。

// 示例代码:

const fileInput = document.getElementById("fileInput");

fileInput.addEventListener('change', () => {
    const file = fileInput.files[0];
    
    if (file) {
        const reader = new FileReader();
        reader.onload = (e) => {
            const text = e.target.result;
            store.markdownText = text;
        };

        reader.readAsText(file);
    }
});

原因分析

因为我们是用的方法使用的是change事件意思为,当文件发生改变的时候才会触发这个事件,于是如果文件是之前的文件那么event中的内容则不会发生变化。

vue 复制代码
const handelDocumentImport = () => {
	fileInput.value.click();

	fileInput.value.addEventListener('change', (event: any) => {
		// 不能使用
		// event.target.files[0];
		const file = fileInput.value.files[0];

		if (file) {
			const reader = new FileReader();
			reader.onload = (e: any) => {
				const text = e.target.result;
				store.markdownText = text;
			};

			reader.readAsText(file);
		}
	});
};

解决方式

先定义变量用于存储文件inputfile中的内容,之后每次文件点击修改时都将内容存储到这个变量中

之后只需要读取这个变量的files即可

js 复制代码
const fileInput = document.getElementById("fileInput");

fileInput.value.addEventListener('change', () => {
    const file = fileInput.value.files[0];
    
    if (file) {
    const reader = new FileReader();
    reader.onload = (e: any) => {
        const text = e.target.result;
        store.markdownText = text;
    };

    reader.readAsText(file);
});
相关推荐
踢足球09292 分钟前
寒假打卡:2026-2-7
java·开发语言·javascript
_果果然3 分钟前
这 7 个免费 Lottie 动画网站,帮你省下一个设计师的工资
前端
QT.qtqtqtqtqt5 分钟前
uni-app小程序前端开发笔记(更新中)
前端·笔记·小程序·uni-app
楚轩努力变强22 分钟前
iOS 自动化环境配置指南 (Appium + WebDriverAgent)
javascript·学习·macos·ios·appium·自动化
薛定谔的猫喵喵26 分钟前
基于PyQt5的视频答题竞赛系统设计与实现
开发语言·qt·音视频
岱宗夫up32 分钟前
Python 数据分析入门
开发语言·python·数据分析
Aliex_git32 分钟前
跨域请求笔记
前端·网络·笔记·学习
码界筑梦坊33 分钟前
325-基于Python的校园卡消费行为数据可视化分析系统
开发语言·python·信息可视化·django·毕业设计
多恩Stone37 分钟前
【RoPE】Flux 中的 Image Tokenization
开发语言·人工智能·python
李日灐39 分钟前
C++进阶必备:红黑树从 0 到 1: 手撕底层,带你搞懂平衡二叉树的平衡逻辑与黑高检验
开发语言·数据结构·c++·后端·面试·红黑树·自平衡二叉搜索树