Element UI - http-request 覆盖默认的上传行为,自定义上传的实现

结合文章 - 阿里OSS Java-SDK带进度条上传,配合前端element-ui upload组件使用示例

表单中的 ui

<el-form-item label="课程文件" :label-width="formLabelWidth">
    <el-upload
            :show-file-list="false"
            :file-list="playUrls"
            :http-request="uploadSectionFile"> <!--此处使用自定义上传实现http-request-->
        <el-button size="small" type="primary">点击上传</el-button>
        <el-tag v-show="showSectionFileName" type="gray">{{sectionFileName}}</el-tag>
        <div slot="tip" class="el-upload__tip">请等待进度条100%之后再提交表单</div>
    </el-upload>
    <el-progress v-show="showProgress" :text-inside="true" :stroke-width="18"
                 :percentage="uploadPercent"></el-progress>
</el-form-item>

http-request指向的函数会有一个element 的默认回调参数 定义为param.里面包含很多东西,可以自己debug查看
param.file就是要上传的文件

uploadSectionFile: function (param) { //自定义文件上传
    var fileObj = param.file;
    // 接收上传文件的后台地址
    var FileController = "/file/item/upload";
    // FormData 对象
    var form = new FormData();
    // 文件对象
    form.append("file", fileObj);
    // 其他参数
    form.append("xxx", xxx);
    // XMLHttpRequest 对象
    var xhr = new XMLHttpRequest();
    xhr.open("post", FileController, true);
    xhr.upload.addEventListener("progress", vm.progressFunction, false); //监听上传进度
    xhr.onload = function () {
        vm.Form.playUrl = xhr.response; //接收上传到阿里云的文件地址
        vm.$message({
            message: '恭喜你,上传成功!',
            type: 'success'
        });
    };
    xhr.send(form);
},

监听上传进度中指定的函数,此函数在上传过程中会一直执行,所以通过 i来控制只执行一次

progressFunction: function () {
  if (vm.i == 0) { //控制上传中状态只执行一次上传
        vm.showStatus();
        vm.showProgress = true;
        vm.i = 1;
    }
},

定时查询上传进度 uploadPercent是上传进度

showStatus: function () { 
    var intervalId = setInterval(function () {
        $.get("/file/item/percent", {}, function (data) {
            var percent = data;
            if (percent >= 100) {
                clearInterval(intervalId);
                percent = 100;//不能大于100
                vm.uploadPercent = percent;
                vm.resetPercent(); //在文章开头的上篇文章中有此函数,用于重置后台的上传进度
            }
            vm.uploadPercent = percent;
        }, "json");
    }, 1000);
},
  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
element uihttp-request一个用于自定义文件上传的函数。在这个函数中,通过参数param可以获取到要上传文件,可以通过param.file来获取文件对象。在函数中,首先创建一个FormData对象,然后将文件对象添加到FormData中,同时可以添加其他参数。接下来,创建一个XMLHttpRequest对象,使用open方法指定请求的方法和URL,然后通过send方法发送请求。在发送请求之,可以通过xhr.upload.addEventListener方法监听上传进度。当上传完成后,可以通过xhr.onload方法获取到上传到阿里云的文件地址,并进行相应的处理。\[2\] #### 引用[.reference_title] - *1* *2* [Element UI - http-request 覆盖默认上传行为自定义上传实现](https://blog.csdn.net/m0_37893932/article/details/79237308)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [elementUI 上传组件 http-request覆盖默认上传行为,可以自定义上传实现)使用](https://blog.csdn.net/qq_39759115/article/details/82287207)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

fool_dawei

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

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

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

打赏作者

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

抵扣说明:

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

余额充值