Vue - 使用 ref 设置文件时,文件输入元素的 @change 未触发 - 拖放文件上传

Vue - File input element's @change not triggered when its files are set using ref - drag and drop file upload

我有一个用于拖放图片上传的文件输入。

    <input
          type="file"
          ref="FileInput"
          style="display: none;"
          @change="onFileSelect"
          accept=".jpg,.jpeg,.png,.tiff,.webp"
        />

更改时触发 OnFileSelect 函数。

onFileSelect(e) {
      console.log("came here");
      const file = e.target.files[0];
      ...
      ...
      // here the code sends the files to be uploaded in server
}

有一个包含输入字段的放置区:

<div
      ref="dropZone"
      @drop="onDrop($event)"
      @click="$refs.FileInput.click()"
    >

onDrop函数如下:

onDrop(e) {
      this.$refs.FileInput.files = e.dataTransfer.files;
      //this changes fileList in input but the onChange in input field is not triggered
      console.log("Yes", this.$refs.FileInput.files);
    },

虽然当我将图像文件放入拖放区时触发了 onDrop 并且输入中的文件列表也发生了变化,但在 onDrop 函数之后没有调用函数 onFileSelect(应在输入更改时触发)。我怎样才能做到这一点?提前致谢!

onChange 输入类型文件的事件不会在 dropEnd.

上触发

相反,您必须修改当前的 onChange 方法。这样你就可以使用相同的代码来结束。

像这样更新您的 onFileSelect 方法:

onFileSelect(e) {
      console.log("came here");
      const file = e.target.files[0];

      uploadFile(file) // this method will be responsible for uploading file to server. Move all code written in onFileSelect to this method.
}

现在在 DropEnd 上,只需使用文件参数调用此方法。

onDrop(e) {
     uploadFile(e.dataTransfer.files[0])
    },