Vue文件上传——连续上传同一个文件

Dav*_*ena 2 file-upload typescript vue.js

我正在尝试为聊天应用程序制作文件上传功能。我的 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>
Run Code Online (Sandbox Code Playgroud)

我的打字稿文件看起来像:

 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 = {}
})
Run Code Online (Sandbox Code Playgroud)

}

上传有效,但如果用户上传相同的图像,则不会进行 @change 回调并且不会上传文件。谁能帮我?

Ray*_*den 7

因此,经过一些研究(见评论),我和问题的作者发现,如果您两次选择同一个文件,Chrome 不会触发更改事件。Firefox 可以。所以我建议他在上传事件触发后简单地将该字段的值设置为空字符串。这样当他再次选择同一个文件时,它会被认为是一个更改。

  • 出于这个原因,我建议使用动态文件输入元素,并在选择文件后销毁并重新创建新的文件元素。 (2认同)