Vue使用input(type=file)上传文件

64 篇文章 3 订阅
<a-icon type="plus-square" @click="uploadMaterial()" />  
<input type="file" style="display:none" ref="file" @click="e => {e.target.value = '';} " @change="getFileData"
/>

触发方法

@click="e => {e.target.value = ‘’;} " 设置这个方法是为了防止上传两次相同的文件,会触发不了

 uploadMaterial() {
      this.$refs.file.dispatchEvent(new MouseEvent("click"));
    },
    // 触发上传材料文件
    getFileData() {
      const inputFile = this.$refs.file.files[0];
      let filename = inputFile.name;
      // 此处应向后台请求 后台保存上传文件名称返回fileId作为文件标识
      let param = {
         fileId: data.fileId,
         file: inputFile
      };
      this.uploadFile(param);
    },
    // 最后上传
    uploadFile(param) {
      let formData = new FormData();
      formData.set("fileName", param.fileId);
      formData.set("file", param.file);
      upload({
        formData
      }).then(() => {
        this.$message.success("上传成功");
      });
    },
export function upload(param) {
  return request({
    url: "xxxxxx",
    method: "post",
    data: param,
    headers: { "Content-Type": "multipart/form-data" },
    transformRequest: function(data) {
      const formData = new FormData();
      let i = data.formData.entries();
      let j = i.next();
      while (!j.done) {
        formData.set(j.value[0], j.value[1]);
        j = i.next();
      }
      return formData;
    }
  });
}
import axios from "axios";
/**
 * 封装axios异步请求的方法==================
 */
//创建一个axios对象-----------
const request = axios.create({
  //baseURL:'/dev-api',//基础路径
  baseURL: process.env.VUE_APP_BASE_API, //根据不同的环境,加载不同的常量值
  //  baseURL: '/',
  timeout: 50000 //请求超时,50000毫秒
});
//设置请求拦截器====================================
//对拦截进行请求--------------------
request.interceptors.request.use(
  config => {
    //请求拦截
    config.data = {
      ...config.data
    };
    return config;
  },
  error => {
    //出现异常
    return Promise.reject(error); //es6写法
  }
);
//设置响应拦截器==================================
//对拦截进行响应--------------------
request.interceptors.response.use(
  response => {
    if (!response.data || response.data == "") {
      return '{"flag":"failure","msg":"未知错误"}';
    }
    return response.data;
  },
  error => {
    return Promise.reject(error);
  }
);
export default request; //导出自定义创建的axios对象,供其他组件进行使用

``
Vue2中,针对input type=file的change事件,可以通过以下步骤进行处理: 1. 首先,我们需要在Vue组件的template中定义一个input元素,并指定typefile,用于选择文件: ``` <input type="file" @change="handleFileChange"> ``` 2. 接下来,在Vue组件的methods中定义handleFileChange方法,用于处理change事件: ``` methods: { handleFileChange(event) { // 通过event.target.files获取选择的文件 const file = event.target.files[0]; // 进行相应的操作或赋值 this.uploadFile(file); }, uploadFile(file) { // 上传文件的逻辑处理 // 可以使用第三方库如axios进行文件上传操作 // 也可以调用后端接口进行文件上传 console.log('上传文件:', file); } } ``` 3. 在handleFileChange方法中,我们可以通过event.target.files获取到选择的文件列表。由于input type=file元素支持多文件选择,所以通过files属性获取到的是一个文件数组。在大多数情况下,我们只需要选择单个文件,所以可以直接取files[0]获取到文件对象。 4. 在handleFileChange方法中,我们可以通过this.uploadFile(file)来调用上传文件的逻辑处理函数。在uploadFile函数中,可以进行相应的文件上传操作,如使用第三方库axios发送请求,或调用后端接口进行文件上传。 总结:以上就是在Vue2中处理input type=file的change事件的步骤。首先在template中定义input元素,并指定typefile,然后在methods中定义处理change事件的方法,并在其中处理选择的文件。通过event.target.files获取选择的文件,再进行相应的操作或赋值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值