基於antd的上傳文件進度條

最新新搭了一個控制檯,是基於阿里antd框架搭建的,總體上來講,antd從UI交互和組件的api上來看,還都是很好的框架了,不過還是踩了不少坑的,哈哈,後面慢慢整理出來。

這裏碰到的情況是,有個上傳大文件的需求,需要在前端展示出上傳的進度,剛接到需求的時候,我想到的方法是,由server端動態返回上傳進度的百分比,前端一直不停的調用這個接口就行了,後來百度了下,發現前端自己就可以實現這個需求,是通過原生XMLHttpRequest實現的,整理了下核心代碼

//通過前端原生XMLHttpRequest動態獲取上傳文件進度
doTransferFile = (file) => {
    let mySelf = this;
    let formData = new FormData();
    let url = "http://xxx:444/upload_file.php";
    let file = document.getElementById("chooseFile").files[0];
    console.log(file)

    formData.append("file",file);
    // console.log(modal);
    // console.log(formData);
    // return false;
    /* eslint-disable */
    $.ajax({ 
        url : url, 
        type : 'POST',
        enctype: 'multipart/form-data',
        data : formData, 
        // 告訴jQuery不要去處理髮送的數據
        processData : false, 
        // 告訴jQuery不要去設置Content-Type請求頭
        contentType : false,
        timeout : 60000,//設置超時時間
        beforeSend:function(){
            console.log("現在開始上傳文件!");
			notification['info']({
				message: '提示',
				description: '現在開始上傳文件!',
			});
        },
	    xhr: function(){
			let myXhr = $.ajaxSettings.xhr();
			// console.log(myXhr)
			if(myXhr.upload){
				myXhr.upload.addEventListener('progress',function(e) {
					if (e.lengthComputable) {
						let percent = Math.floor((e.loaded/e.total)*100);
						// console.log(e.loaded)
						// console.log(e.total)
						console.log(percent)
						let upload = mySelf.state.upload;
						upload.progress.loaded = e.loaded;
						upload.progress.total = e.total;
						upload.progress.percentage = percent;
						mySelf.state.upload = upload;

						// console.log(info);
				        mySelf.setState({
				            upload: upload
				        });
					}
				},false);

				myXhr.upload.addEventListener('load',function(e) {
					console.log('fish')
				},false);

			}
			return myXhr;
	    },
        success : function(res) {
        	console.log(res)

        }, 
        error : function(res) { 

        } 
    });
};
在antd框架下,調用的Progress組件動態展示的上傳文件進度,效果圖如下,待全部上傳成功後,由接口返回上傳文件的大小,路徑等信息,render到頁面上



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章