解决input的type=“file“时,在上传同一文件/图片@change不进行二次触发的问题

解决input的type="file"时,在上传同一文件/图片@change不进行二次触发的问题

一、应用场景

应用场景:在此电脑中选择要导入的文件,文件类型任意,文件双击后在列表中先要进行预览,预览无误后再点击保存导入的数据
在这里插入图片描述
在这里插入图片描述

二、代码实现

<template>
  <div>
    <div class="file-input-container">
      <el-button type="primary"> 导入 </el-button>
      <input type="file" class="file-input" @change="handleFileImport" />
    </div>
    <el-button
      type="primary"
      style="margin-right: 12px"
      @click="saveImportData()"
    >
      保存导入数据
    </el-button>
  </div>
</template>

<script lang='ts'>
import { defineComponent, reactive, ref } from 'vue';
import { List, previewImported } from '@/services/list';
interface ViewState {
  list: List[];
  selectedFile: File | null;
}
export default {
  name: '',
  setup() {
    const state = reactive<ViewState>({
      selectedFile: null,
      list: [],
    });

    function saveImportData() {
      // 保存请求接口逻辑
    }
    return {
      state,
      saveImportData,
    };
  },

  methods: {
    handleFileImport(evt) {
      let [file] = evt.target.files;
      this.selectedFile = file;
      const data = new FormData();
      data.append('file', file);
      // 导入后的数据预览
      previewImported(data)
        .then((response) => {
          // 使用数组的格式 接收response这里是因为返回的response为数组对象格式:[{}],list和response为一样的格式类型 可省略
          //const order: [] = response;
          this.list = order;
        })
        .finally(() => {
          // 解决上传同一文件时无法请求接口:上传完上一个文件后 清空上一个文件的内容 用以保证下一次上传时获取的是一个新的文件而不是一个重复的文件
          evt.target.value = '';
        });
    },
  },
};
</script>
<style scoped>
</style>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值