vue+axios+el-upload http-request 文件上传

16 篇文章 2 订阅

vue axios 接口请求封装

一、接口文件 src/api/file.js

import request from "@u/request";

/**
 * 文件上传
 * @param data {Object} formData对象 "file"
 * @returns {*}
 */
export function uploadFile(data) {
  return request({
    url: "/file/upload",
    method: "post",
    data: data,
    headers: {
      "Content-Type": "multipart/form-data;",
    },
    transformRequest: [
      function () {
        return data;
      },
    ],
  });
}

二、使用页面示例

<template>
  <div class="upload-container">
    <el-upload
      ref="uploadForm"
      :before-upload="beforeUpload"
      :http-request="uploadFile"
      :limit="limit"
      accept="image/png,image/jpg,image/jpeg"
      action="string"
      class="upload-demo"
      multiple
    >
      <el-button size="small" class="upload-btn" type="primary">
        <span class="iconfont icon-shangchuan" />上传文件
      </el-button>
    </el-upload>
  </div>
</template>

<script>
import { uploadFile } from "@i/file";

export default {
  name: "UploadFile",
  props: {
    limit: {
      type: Number,
      default: 1,
    },
  },
  data() {
    return {};
  },
  computed: {},
  methods: {
    // 上传文件
    uploadFile(item) {
      // 开始上传文件 新建一个formData
      const formData = new FormData();
      // 通过append向form对象添加数据
      formData.append("file", item.file);
      uploadFile(formData)
        .then((e) => {
          console.log("上传成功");
        })
        .catch((e) => {
          console.log("上传失败");
          this.clearFlies();
        });
    },
    // 移除上传图片列表
    clearFlies() {
      this.$refs.uploadForm.clearFiles();
    },
    // 上传文件之前
    beforeUpload(file) {
      const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
      const extension1 = fileSuffix === "png";
      const extension2 = fileSuffix === "jpg";
      const extension3 = fileSuffix === "jpeg";
      const isLt2M = file.size / 1024 / 1024 < 0.5;

      if (!extension1 && !extension2 && !extension3) {
        this.$msg("上传文件只能是 png、jpg、jpeg格式", "error");
        return false;
      }

      if (!isLt2M) {
        this.$msg("上传文件大小不能超过 2MB", "error");
        return false;
      }
    },
  },
};
</script>

<style lang="scss" scoped>
.upload-container {
  .upload-demo {
    display: flex;

    .upload-btn {
      background-color: #525252;
      border: none;
    }
  }
}
</style>

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
el-uploadElement UI中的一个组件,用于实现文件上传功能。而http-request是一个自定义的文件上传方法。 el-upload组件可以通过设置action属性来指定文件上传的地址。默认情况下,el-upload会使用浏览器的XMLHttpRequest对象发送文件上传请求。但是在某些情况下,我们可能需要自定义文件上传的方法,这时可以使用http-request来实现。 http-request是一个自定义的文件上传方法,它可以通过发送HTTP请求来实现文件上传。在Vue中,我们可以使用axios库来发送HTTP请求。通过在el-upload组件的before-upload属性中调用http-request方法,我们可以实现自定义的文件上传逻辑。 以下是一个使用el-uploadhttp-request实现文件上传的示例: ```vue <template> <el-upload class="upload-demo" action="" :before-upload="beforeUpload" > <el-button size="small" type="primary">点击上传</el-button> </el-upload> </template> <script> import axios from 'axios'; export default { methods: { beforeUpload(file) { // 构建FormData对象 const formData = new FormData(); formData.append('file', file); // 发送HTTP请求 axios.post('/upload', formData) .then(response => { // 文件上传成功的处理逻辑 console.log(response.data); }) .catch(error => { // 文件上传失败的处理逻辑 console.error(error); }); // 阻止el-upload组件默认的文件上传行为 return false; } } } </script> ``` 在上述示例中,el-upload组件的action属性被设置为空字符串,这是因为我们将使用http-request来发送文件上传请求。在before-upload属性中,我们调用了beforeUpload方法来处理文件上传逻辑。在beforeUpload方法中,我们首先构建了一个FormData对象,并将文件添加到其中。然后,我们使用axios库发送了一个POST请求,将FormData对象作为请求体发送到服务器。最后,我们阻止了el-upload组件默认的文件上传行为,以避免重复上传文件。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱宇阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值