antd組件Upload實現(xiàn)自己上傳的實現(xiàn)示例
前言
在實現(xiàn)圖片上傳時,可能需要用到Upload,但是它默認(rèn)的上傳方式是加入圖片后直接上傳,如果要實現(xiàn)最后再一次性上傳,需要自定義內(nèi)容。


//添加按鈕的樣式
const uploadButton = (
<div>
<Icon type="plus" />
<div className="ant-upload-text">Upload</div>
</div>
);
<Upload
//樣式
className={styles['override-ant-btn']}
//陳列樣式,現(xiàn)在是卡片式
listType="picture-card"
//再圖片上傳到頁面后執(zhí)行的函數(shù),自定義讓他不執(zhí)行
beforeUpload={() => false}
//數(shù)據(jù),即圖片,是一個數(shù)組
fileList={fileList}
//當(dāng)點擊查看時調(diào)用(上圖的那個眼睛)
onPreview={this.handlePreview}
//數(shù)據(jù)改變時調(diào)用
onChange={this.handleChange}
>
//當(dāng)不少于一張圖時,不顯示怎加圖片的按鈕。
{fileList.length >= 1 ? null : uploadButton}
</Upload>
還有一個移除時調(diào)用的函數(shù)onRemove(),即點擊上圖的垃圾桶,這里沒有定義。
handlePreview = (file) => {
this.setState({
previewImage: file.url || file.thumbUrl,
visible: true,
});
};
<Modal visible={visible} footer={null} onCancel={this.handleCancel}>
<img alt="加載" style={{ width: '100%',height: '100%' }} src={previewImage} />
</Modal>
利用Modal顯示圖片。
handleChange = ({ fileList }) => {
this.setState({ fileList });
};
數(shù)據(jù)改變時直接重設(shè)fileList數(shù)組的值(我這里只有一張圖可以這么做)。
最后是fileList的一些基本設(shè)置:
fileList: [{
uid: 'id',
name: '標(biāo)題',
//目前的狀態(tài)
status: 'done',
//圖片的url或者base64
url: '',
type: 'image/jpeg',
}],
PS:基于antd的上傳文件進(jìn)度條
核心代碼
//通過前端原生XMLHttpRequest動態(tài)獲取上傳文件進(jìn)度
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不要去處理發(fā)送的數(shù)據(jù)
processData : false,
// 告訴jQuery不要去設(shè)置Content-Type請求頭
contentType : false,
timeout : 60000,//設(shè)置超時時間
beforeSend:function(){
console.log("現(xiàn)在開始上傳文件!");
notification['info']({
message: '提示',
description: '現(xiàn)在開始上傳文件!',
});
},
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框架下,調(diào)用的Progress組件動態(tài)展示的上傳文件進(jìn)度,效果圖如下,待全部上傳成功后,由接口返回上傳文件的大小,路徑等信息,render到頁面上
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
微信小程序?qū)崿F(xiàn)image組件圖片自適應(yīng)寬度比例顯示的方法
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)image組件圖片自適應(yīng)寬度比例顯示的方法,簡單講述了image組件的常用屬性,并結(jié)合實例形式分析了微信小程序?qū)崿F(xiàn)圖片自適應(yīng)寬度比例的相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
javascript使用isNaN()函數(shù)判斷變量是否為數(shù)字
javascript中判斷變量是否為數(shù)字的方法,這里主要介紹javascript里的 isNaN() 函數(shù),具體使用如下,感興趣的朋友可以參考下2013-09-09
javascript數(shù)據(jù)結(jié)構(gòu)之串的概念與用法分析
這篇文章主要介紹了javascript數(shù)據(jù)結(jié)構(gòu)之串的概念與用法,簡單講述了串的概念、功能并結(jié)合實例形式分析了基于javascript實現(xiàn)串的遍歷、比較、查找等相關(guān)操作技巧,需要的朋友可以參考下2017-04-04
javascript event在FF和IE的兼容傳參心得(絕對好用)
event在IE和FF不兼,下面為大家分享的是javascript event在FF和IE的兼容傳參心得,需要的朋友可以參考下2014-07-07
JavaScript原型繼承_動力節(jié)點Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了JavaScript原型繼承的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06

