在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML5  HTML/ 使用axios上傳文件,如何取消上傳

使用axios上傳文件,如何取消上傳

clipboard.png

如上圖所示,當我點擊提交時,鏡像會一直上傳,并且?guī)в羞M度條,彈框不會消失(直到上傳成功才會消失)。
這個功能我已經(jīng)實現(xiàn)了。

目前有個疑問是,我如何觸發(fā)上傳的取消事件(Abort)。
當我點擊取消按鈕時,上傳功能取消。

貼上代碼

                var fd = new FormData();
                fd.append('image', that.$refs.upload.files[0]);
                fd.append('filename', that.formData.images);
                fd.append("system_type", that.formData.systemTypeVal);
                fd.append("name", that.formData.imagesName);
                fd.append("description", that.formData.description);
                fd.append("system_vision", that.formData.systemVersion);
                fd.append("disk_format", that.formData.format);
                that.Axios({
                  method: 'post',
                  url: that.prefix + '/yr_images/create_image/',
                  data: fd,
                  headers: { 'Content-Type': 'multipart/form-data' },
                  onUploadProgress(progressEvent){
                    if (progressEvent.lengthComputable) {
                      let val = (progressEvent.loaded / progressEvent.total * 100).toFixed(0);
                      that.formData.showProgress = true;
                      that.formData.startValue = parseInt(val)
                    }
                  }
                })
                  .then(function (response) {
                    if (response.data.status == 1) {
                      if (that.formData.startValue == 100) {
                        util.notification('success', '成功', response.data.success_msg);
                        that.getData(1);
                      }
                    } else {
                      util.notification('error', '錯誤', response.data.error_msg);
                    }
                    that.modal.formVisible = false;
                  })
                  .catch(function (error) {
                    that.modal.loading = false;
                    that.modal.formVisible = false;
                    console.log(error);
                  })
回答
編輯回答
朕略萌

https://github.com/axios/axio...

就是在發(fā)起請求時, 添加 cancelToken 參數(shù), 然后對這個 token 調(diào)用 cancel 方法.

2018年1月20日 20:51
編輯回答
好難瘦

按樓上的方法,問題已決定,其實axios已經(jīng)提供了方法。
貼一下我自己的代碼吧。

//在data里聲明一個source
data(){
return{
source:null,//取消上傳
}
//上傳文件
                let that = this;
                let cancelToken = that.Axios.CancelToken;//Axios使我修改axios原型鏈了。
                that.source = cancelToken.source();
                var fd = new FormData();//聲明formData()
                fd.append('image', that.$refs.upload.files[0]);
                fd.append('filename', that.formData.images);
                fd.append("system_type", that.formData.systemTypeVal);
                fd.append("name", that.formData.imagesName);
                fd.append("description", that.formData.description);
                fd.append("system_vision", that.formData.systemVersion);
                fd.append("disk_format", that.formData.format);
                that.Axios({//發(fā)送axios請求
                  method: 'post',
                  url: that.prefix + '/yr_images/create_image/',
                  data: fd,
                  headers: { 'Content-Type': 'multipart/form-data' },
                  cancelToken:that.source.token,//取消事件
                  onUploadProgress(progressEvent){//上傳進度條事件
                    if (progressEvent.lengthComputable) {
                      let val = (progressEvent.loaded / progressEvent.total * 100).toFixed(0);
                      that.formData.showProgress = true;
                      that.formData.startValue = parseInt(val)
                    }
                  }
                })
                  .then(function (response) {
                    if (response.data.status == 1) {
                      if (that.formData.startValue == 100) {
                        util.notification('success', '成功', response.data.success_msg);//這是全局封裝的方法,不用在意。
                        that.getData(1);
                      }
                    } else {
                      util.notification('error', '錯誤', response.data.error_msg);
                    }
                    that.modal.formVisible = false;
                  })
                  .catch(function (error) {
                    that.modal.loading = false;
                    that.modal.formVisible = false;
                    if(that.Axios.isCancel(error)){//主要是這里
                      util.notification('success', '成功', '取消上傳鏡像操作成功');
                    }
                  });
}


//點擊取消事件,也就是上圖的取消按鈕
       cancel(){
       let that = this;
        if(that.source){//我先判斷soucre是否存在,因為如果我打開彈框不作任何操作,點擊取消按鈕沒有這一層判斷的話,that.source.cancel('取消上傳');會報錯。
          that.source.cancel('取消上傳');//"取消上傳"這幾個字,會在上面catch()的error中輸出的,可以console看一下。
        }
        that.modal.formVisible = false;
       }
2017年9月25日 12:04