elementui-upload自定义上传方式上传到服务器返回url:http

1-先封装一个uploadImage.vue组件
<template>
     <div class="photo">
        <el-upload
            class="avatar-uploader"
            action="https://jsonplaceholder.typicode.com/posts/"
            :show-file-list="false"
            :on-success="handleAvatarSuccess"
            :before-upload="beforeAvatarUpload"
            :http-request="handleUpload">
            <!-- <img v-if="imageUrl" :src="imageUrl" class="avatar"> -->
            <img v-if="value" :src="value" class="avatar">
            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
        </el-upload>
    </div>
</template>
<script lang="ts">
// v-model 的本质 还是父子组件通信
// 1.他会给子组件传递一个名字叫做 value 的数据
// 2.默认监听input 事件修改绑定的数据
import Vue from 'vue'
import { uploadImage } from '@/services/user'
export default Vue.extend({
  props: {
    value: String
  },
  data () {
    return {
      imageUrl: ''
    }
  },
  methods: {
    // eslint-disable-next-line @typescript-eslint/no-explicit-any
    handleAvatarSuccess (res: any, file: any) {
      this.imageUrl = URL.createObjectURL(file.raw)
    },
    // eslint-disable-next-line @typescript-eslint/no-explicit-any
    beforeAvatarUpload (file: any) {
      const isJPG = file.type === 'image/jpeg'
      const isLt2M = file.size / 1024 / 1024 < 2

      if (!isJPG) {
        this.$message.error('上传头像图片只能是 JPG 格式!')
      }
      if (!isLt2M) {
        this.$message.error('上传头像图片大小不能超过 2MB!')
      }
      return isJPG && isLt2M
    },
    // 自定义上传方式 handleUpload
    // eslint-disable-next-line @typescript-eslint/no-explicit-any
    async handleUpload (options: any) {
      console.log(options, 'options')
      const fd = new FormData()
      fd.append('image', options.file) // file名称是后端接口传递的参数 名称file 默认也是file
      const res = await uploadImage(fd)
      console.log(res)

      // 上传给父组件
      this.$emit('input', res.data.data.url)
    }
  }
})
</script>
<style lang="scss" scoped>
 ::v-deep .avatar-uploader .el-upload {
    border: 1px dashed #d9d9d9;
    border-radius: 6px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
  }
  ::v-deep .avatar-uploader .el-upload:hover {
    border-color: #409EFF;
  }
  .avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    width: 178px;
    height: 178px;
    line-height: 178px;
    text-align: center;
  }
  .avatar {
    width: 178px;
    height: 178px;
    display: block;
  }
</style>

2-在父组件中引入 upload组件
/* eslint-disable @typescript-eslint/no-explicit-any */
<template>
  <div class="course">
    <CourseImage v-model="imageUrl"></CourseImage>
  </div>
</template>

<script lang="ts">

import Vue from 'vue'
import CourseImage from './components/CourseImage.vue'
export default Vue.extend({
  name: 'Course',
  components: {
    CourseImage
  },
  data () {
    return {
      imageUrl: '',
      course: {
        courseListImg: null
      }
    }
  }

})
</script>

<style lang="scss" scoped>

</style>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
您可以使用 el-upload 组件来自定义上传http-request。el-uploadElement UI 框架中用于文件上传的组件,支持多种自定义配置选项。 要实现自定义上传http-request,您可以通过设置 el-upload 组件的 action 属性来指定上传文件的接口地址。例如: ```html <el-upload action="/your-upload-api" :http-request="uploadRequest" > <!-- 填充上传组件的内容 --> </el-upload> ``` 然后,在 Vue 实例的 methods 中定义 uploadRequest 方法来处理上传请求。uploadRequest 方法会接收一个参数,其中包含了上传文件的相关信息,如文件对象、文件名等。您可以在该方法中使用 axios 或其他网络请求库发送自定义上传请求。例如: ```js methods: { uploadRequest(file) { // 构建 FormData 对象,将文件和其他参数添加到 FormData 中 const formData = new FormData(); formData.append('file', file.raw); formData.append('name', file.name); // 使用 axios 发送自定义上传请求 axios.post('/your-upload-api', formData) .then(response => { // 处理上传成功的响应 console.log(response.data); }) .catch(error => { // 处理上传失败的错误 console.error(error); }); } } ``` 在 uploadRequest 方法中,您可以根据实际需求构建 FormData 对象,并发送自定义上传请求。在请求成功或失败时,您可以进行相应的处理逻辑。 这样,您就可以使用 el-upload 组件来实现自定义上传http-request。希望对您有所帮助!如有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值