为什么当input的type为file类型时,上传相同的图片名字,然后 onchange="uploadShenBaoRen()" change不了怎么办,因为两次上传的文件的名字一摸一样,怎么将它触发
时间: 2024-10-24 15:15:16 浏览: 24
HTML input file控件限制上传文件类型_动力节点Java学院整理
当input的type属性设置为`file`时,用户选择文件后,浏览器通常会自动为每个新上传的文件生成一个唯一的内部ID,即便它们有相同的名称。如果你的JavaScript函数`uploadShenBaoRen()`依赖于文件名来进行判断或操作,那么当两个同名文件上传时,由于浏览器生成的是不同的内部标识符,这可能导致函数无法识别之前的事件。
为了解决这个问题,你可以采用以下策略:
1. **检查文件内容**:而不是直接依赖文件名,比较每次改变的文件的实际二进制数据,比如可以创建一个哈希值来对比。这样,即使文件名为同一个,只要内容相同,也可以视为已上传。
```javascript
function uploadShenBaoRen(e) {
const file = e.target.files[0];
// 创建一个数据URL或者其他哈希算法获取文件内容哈希
const contentHash = generateContentHash(file);
if (contentHash !== previousFileContentHash) {
// 如果新的文件内容不同,则处理上传
handleUpload(file);
previousFileContentHash = contentHash;
}
}
```
2. **更新DOM元素状态**:在前端给上传按钮或某个显示区域添加唯一标识符,如序号,反映当前选择的文件是第几个。
```html
<input type="file" id="fileInput" onchange="uploadShenBaoRen(this)">
<div id="currentFile">选择第1份报告...</div>
<script>
let currentFileIndex = 1;
function uploadShenBaoRen(input) {
const fileName = input.files[0].name;
// 更新显示区的文本
document.getElementById('currentFile').innerText = `选择第${currentFileIndex}份报告 (${fileName})`;
// ...其他上传逻辑...
currentFileIndex++;
}
</script>
```
阅读全文