项目中最近遇到的一个问题,场景是:
文件第一次上传后,修改文件内容后,不刷新页面,再次上传该文件,就出现如下图所示的错误。(刷新页面可以正常上传,换成另一个文件也可正常上传)
【现象】
net::ERR_UPLOAD_FILE_CHANGED
【问题原因】
前后两次的文件名并没有发生改变,没有触发input的onchange的事件。
【解决方案】
在接口回调里将input的value置空即可。
// 假如input的ID是file
document.getElementById('file').value = '';
当然,如果有其他方法,也可在评论区留言哦!
=====================分界线=========================
问题场景:
两个Input输入框,一个type=text(value取值fileName),一个type=file(id=file,给另一个输入框赋值)
。。。我又回来了,上述方法对于我现在的业务场景会产生一个新的问题,连续发两次请求,第二次请求的文件名称拿不到(因为第一次请求之后会把file的value清空,导致第二次请求时file拿不到value)。
思来想去,暂时没有什么好的方案,目前的解决方案时把file存起来,即:
const file = document.getElementById('file').files[0]
然后发请求的时候判断:
- 条件1:fileName是否有值
- 条件2:document.getElementById('file').value为空(包括空字符串)
如果两个条件都满足,表明是手动清空的file的value,并且上传的文件没有发生更改,这个时候file直接取上一次保存的值,否则,就取最新的。
如果有什么别的解决方案,希望大家可以留言补充,非常感谢!!!