el-upload实现自定义上传http-request

这篇具有很好参考价值的文章主要介绍了el-upload实现自定义上传http-request。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在使用element的上传组件的时候,我这里用的是上传图片,如图1所示

 el-upload http-request,vue,html,前端,elementui,javascript

正常上传是没有问题的,但如果我上传了第一张之后,然后去上传第二张,依次这样去替换自己想要得,虽然最后一张会把上传上传得给覆盖,但是还是会存在一些问题

el-upload http-request,vue,html,前端,elementui,javascript

 发现得问题有2个:

1.替换多少次,上传接口就要请求多少次,显得比较多余,浪费性能

 el-upload http-request,vue,html,前端,elementui,javascript

  2.就是如果你上传的第三张图片比较大的话,那么可能还没有等到第三张图片上传成功,保存接口就已经调用完了,结果提交的是第二张图,不是最新的第三张(如果你的逻辑是上传图片接口调用完成之后马上调用提交接口的话),如图3

el-upload http-request,vue,html,前端,elementui,javascript

 解决方式:使用http-request自定义上传

1.不管替换多少次,都只会取最后一次(可以解决上面的第一个问题)

2.因为只会取最后一次,我们可以等上传接口成功之后再去调用提交按钮(可以解决上面第二个问题)

上传组件的代码:

html:
<el-upload
   ref="upload"
   class="upload"
   action="string"
   name="file[0]"
   :show-file-list="false"
   accept=".jpg,.jpeg,.png,.JPG,.JPEG"
   :headers="uploadHeader"
  :http-request="UploadImage"
  :auto-upload="false"
  :on-change="onChange"
  :on-success="onSuccess"
   >
   <img v-if="editForm.iconUrl" :src="editForm.iconUrl">
   <i v-else class="el-icon-plus avatar-uploader-icon avatar-upload" />
   <div slot="tip" class="el-upload__tip">
      <p>建议上传 100*100 png格式图片</p>
    </div>
  </el-upload>
js:
methods:{
    // 自定义上传
    UploadImage() {
      this.fileObj = this.file;
      // 创建文件流
      const formData = new FormData();
      formData.append('file[0]', this.fileObj.raw);
      // Format封装在utilsg工具函数中
      Format.fileUploader(formData, '/gallery/image_upload').then(
        (res) => {
          if (res.code === 0) {
            this.editForm.icon = res.data.list[0].file_url;
            this.submit();
          }
        }
      );
    },
  onChange(file) {
      const isJPG =
        file.raw.type === 'image/jpeg' || file.raw.type === 'image/png';
      const isLt2M = file.raw.size / (1024 * 1024) < 2;
      if (!isJPG) {
        this.$refs.upload.clearFiles();
        return this.$message.error('上传头像图片只能是 JPG 格式!');
      } else this.file = file;
      if (!isLt2M) {
        this.$refs.upload.clearFiles();
        return this.$message.error('上传头像图片大小不能超过 2MB!');
      } else this.file = file;
      this.editForm.file = file;
      const reader = new FileReader();
      reader.readAsDataURL(file.raw);
      reader.onloadend = (e) => {
        this.$set(this.editForm, 'iconUrl', e.target.result);
      };
    },
}

2.文件上传器封装

import request from './request';
import { Message } from 'element-ui';
const Format = {
  // 文件上传器
  fileUploader(formData, url) {
    return new Promise((resolve, reject) => {
      request
        .request({
          url: url,
          method: 'post',
          data: formData,
          timeout: undefined,
          headers: {
            'Content-Type': 'multipart/form-data;'
          }
        })
        .then((res) => {
          if (res.code === 1) {
            Message.error(res.message || '上传失败');
          }
          resolve(res);
        }).catch(err => {
          Message.error('上传失败' + err.data.message || '上传失败');
        });
    });
  }
};
export default Format;

使用http-request自定义上传的注意点

  1.action="abcd"这里不能删, action=""也可以为空字符串

  2.使用http-request方法的时候,:on-success,: on-error指令是不会触发的。文章来源地址https://www.toymoban.com/news/detail-521543.html

到了这里,关于el-upload实现自定义上传http-request的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • el-upload自定义上传http-request

    使用http-request自定义上传,触发on-success,on-error钩子。 template js 也可以返回Promise,on-success,on-error钩子就会被执行。

    2024年02月07日
    浏览(38)
  • elementUI+el-upload 上传、下载、删除文件以及文件展示列表自定义为表格展示

    官方文档 https://element.eleme.cn/#/zh-CN/component/upload 具体参数说明,如何实现上传、下载、删除等功能 action :文件上传地址,我的项目里已经封装好了请求。使用的时候需要依据项目填写。 show-file-list : 是否显示已上传文件列表。 headers :设置上传的请求头部。我的项目需要传

    2024年01月20日
    浏览(57)
  • ElementUi 关于 el-upload的自定义上传(http-request)的使用

       在开发中 遇到如下需求,要求前端传参并导入excel表格。导入失败,要弹出错误信息,同时导出错误信息的excel表格,导入成功提示信息即可。 参考官方文档,把上传需要的属性加加入使用   改造之前: 设置headers信息 在el-upload标签中加入http-request ,如下: 具体操作方法

    2024年02月01日
    浏览(40)
  • el-upload实现上传文件夹

    背景:如图一所示,最下面有一个黄色上传文件按钮,为手动上传而且上传区域有上传文件和上传文件夹的区分 所以需要在点击了上传文件夹做特殊处理使得el-upload可以上传文件夹 01.在拖拽上传的区域绑定一个点击事件 handlePreview ,(注意不要直接绑定在el-upload区域,会被触

    2024年02月07日
    浏览(58)
  • vue el-upload实现图片和文字上传

    一、需求: 在表单中使用图片上传,每一张上传的图片都可以加上文字说明通过表单一起传到后台,最后再其他需要的地方展示出来。  二、实现: 后端表单提交时,图片需要的格式是:imageList[ { fileUrl:\\\' \\\', imageExplain:\\\' \\\' } ] 界面代码 v-model=\\\"form.imageUrl\\\" :action=\\\"fileUrl\\\" 调用接

    2024年02月10日
    浏览(53)
  • el-upload实现上传文件并展示进度条

    el-upload在实现文件上传时无法触发on-progress钩子,即使调用后端接口并成功的情况下都无法触发,可以通过如下配置来解决: 随后将config添加至调用后端接口,即可成功获取进度~ html: JS部分

    2024年02月04日
    浏览(37)
  • 使用el-upload组件实现递归多文件上传

    一、需求描述:在页面上点击按钮弹出选择电脑文件的界面,可以一次性选择多个文件一起上传到服务器上,并把上传成功的文件展示在页面上。 · 二、 问题阐述:el-upload是支持多文件上传的,但是是同步进行的,你点击上传按钮,选择了多个文件后点击确定,会同时调用

    2023年04月08日
    浏览(40)
  • element ui实现el-upload用户头像上传(单图上传)

     这是我们要实现的效果 element ui上的代码和效果如下:  接下来我们需要将图片文件上传到接口中,实现代码如下:

    2024年02月12日
    浏览(46)
  • element ui ---- el-upload实现手动上传多个文件

    ui部分 js 实现上传

    2024年02月15日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包