element-ui/axios/flask 限制图片上传的Axios POST速度(队列实现)

element-ui上传图片到python flask的时候,居然框架报错。只能覆盖upload的行为,增加axios post队列了

1. JS代码

// 封装有队列的Promise,限制接口访问的速度
// 主要为了减少python服务器的崩溃
import axios, { AxiosRequestConfig } from 'axios'

const _member = {
  _max: 5,
  _count: 0,
  _taskQueue: []
}

function createTask (caller, resolve, reject) {
  return () => {
    caller()
      .then(resolve)
      .catch(reject)
      .finally(() => {
        _member._count -= 1
        if (_member._taskQueue.length !== 0) {
          const task = _member._taskQueue.shift()
          // console.log('push out')
          task()
        }
      })
  }
}

function call (caller) {
  return new Promise((resolve, reject) => {
    _member._count += 1
    const task = createTask(caller, resolve, reject)
    if (_member._count >= _member._max) {
      // console.log('push in')
      _member._taskQueue.push(task)
    } else {
      task()
    }
  })
}

export function LimitAxiosPost (url, data, config, resolve, reject) {
  // debugger
  call(() => axios.post(url, data, config))
    .then(resolve)
    .catch(reject)
}

2. 使用示例

  1. 上述JS可以放到单独的JS文件中并导入
  2. 覆盖element-ui, upload的http-request
LimitAxiosPost(url, param, config, (res) => {
          // debugger
          if (res.status === 200) {
            that.upload_success(res.data, options.file, that.fileList)
          } else {
            that.upload_error(res.data, options.file, that.fileList)
          }
        }, (res) => {
          // debugger
          that.has_upload_fail += 1
          that.has_upload_count += 1
          that.tableData.push({
            'file_name': options.file.name,
            'message': res.stack
          })
          that.$modal.msgError(options.file.name + '发生异常: ' + res.message)
        })

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Element UI中的Upload组件来上传头像。同时,在上传过程中,你可以使用axios库来实现上传操作。 以下是一个示例代码: ```html <template> <div> <el-upload class="avatar-uploader" :action="uploadUrl" :show-file-list="false" :on-success="handleUploadSuccess" :before-upload="beforeUpload"> <img v-if="imageUrl" :src="imageUrl" class="avatar"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> </div> </template> <script> import axios from 'axios'; export default { data() { return { imageUrl: '', uploadUrl: '/api/upload/avatar' }; }, methods: { beforeUpload(file) { const isJPG = file.type === 'image/jpeg'; const isPNG = file.type === 'image/png'; const isLt2M = file.size / 1024 / 1024 < 2; if (!isJPG && !isPNG) { this.$message.error('上传头像图片只能是 JPG 或 PNG 格式!'); return false; } if (!isLt2M) { this.$message.error('上传头像图片大小不能超过 2MB!'); return false; } return true; }, handleUploadSuccess(response) { if (response.code === 200) { this.imageUrl = response.data.imageUrl; this.$message.success('上传成功!'); } else { this.$message.error('上传失败!'); } } } }; </script> ``` 在这个示例中,我们使用了Element UI的Upload组件来实现头像上传。我们设置了上传的地址`uploadUrl`为`/api/upload/avatar`,在上传之前,我们通过`beforeUpload`方法来验证上传文件的格式和大小。如果验证通过,我们就可以使用axios来将文件上传到服务器。在上传成功后,我们通过`handleUploadSuccess`方法来处理上传成功的结果。如果上传成功,我们将服务器返回的图片地址赋值给`imageUrl`,并且提示上传成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值