antd組件Upload實現(xiàn)自己上傳的實現(xiàn)示例
前言
在實現(xiàn)圖片上傳時,可能需要用到Upload,但是它默認的上傳方式是加入圖片后直接上傳,如果要實現(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}
//當點擊查看時調(diào)用(上圖的那個眼睛)
onPreview={this.handlePreview}
//數(shù)據(jù)改變時調(diào)用
onChange={this.handleChange}
>
//當不少于一張圖時,不顯示怎加圖片的按鈕。
{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: '標題',
//目前的狀態(tài)
status: 'done',
//圖片的url或者base64
url: '',
type: 'image/jpeg',
}],
PS:基于antd的上傳文件進度條
核心代碼
//通過前端原生XMLHttpRequest動態(tài)獲取上傳文件進度
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)展示的上傳文件進度,效果圖如下,待全部上傳成功后,由接口返回上傳文件的大小,路徑等信息,render到頁面上
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
js數(shù)組如何添加json數(shù)據(jù)及js數(shù)組與json的區(qū)別
在JSON中,有兩種數(shù)據(jù)結(jié)構(gòu):對象和數(shù)組。本篇文章給大家介紹js數(shù)組如何添加json數(shù)據(jù)以及js數(shù)組和json的區(qū)別,涉及到j(luò)s json數(shù)組添加相關(guān)知識,感興趣的朋友可以參考下本篇文章2015-10-10
javascript基本數(shù)據(jù)類型和轉(zhuǎn)換
本文主要介紹了javascript的基本數(shù)據(jù)類型和轉(zhuǎn)換,具有很好的參考價值,下面跟著小編一起來看下吧2017-03-03

