网站搜索

typescript - Vue 文件上传 - 连续上传相同的文件


我正在尝试为聊天应用制作文件上传功能。我的 HTML 看起来像这样:(我不使用表单)

 <span class="file-attach mr3">
  <input id="uploadFile" name="uploadFile" type="file" @change="attachFile($event.target.files)" multiple>
  <i class="w-10 ml4 icon-attach"></i>
</span>

我的 TypeScript 文件看起来像这样:

 async attachFile(files) {
if (!files.length) {
  return
}
const reader = new FileReader()
reader.addEventListener('loadend', () => {
  this.mediaLinkDocument = {
    title: this.file.type.indexOf('image') !== -1 ? '' : this.file.name,
    type: this.file.type,
    size: this.file.size,
  }
  this.sendFile(this.file)
})

Array.from(Array(files.length).keys()).forEach((id) => {
  console.log(files[id])
  this.file = files[id]

  if (this.file.size > MAX_ATTACHMENT_SIZE) {
    alert('O tamanho máximo é de 20 MB')
    this.file = undefined

    return
  }
  reader.readAsDataURL(this.file)
  files = {}
})

}

上传可以正常工作,但如果用户上传相同的图片,它不会触发 @change 回调,并且文件不会被上传。有人能帮我吗?

答案#1

所以在做了一些研究之后(见评论),我和提问的作者发现,如果你选择同一个文件两次,Chrome 不会触发 change 事件。而 Firefox 会。因此我建议他在上传事件触发后,将字段的值设置为空字符串。这样当他再次选择同一个文件时,就会被视为一次更改。

答案#2

Google Chrome 对同一个文件没有触发 change 事件。为了解决这个问题,我在 vuejs 中按如下方式操作

<input
   ref="ExcelfileUpload"
   type="file"
   multiple="false"
   id="sheets"
   @change="onchangeOpenOrderUpload"
/> 



onchangeOpenOrderUpload(e) {
    ... codes
    this.$refs.ExcelfileUpload.value = "";
}

相关文章