gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

react怎么實現(xiàn)文件上傳

react實現(xiàn)文件上傳的方法:1、通過“import { Table, Button, Modal, Form, Input, Upload, Icon, notification } from 'antd';”引入所需antd的部件;2、通過“handleOk = e => {const { fileList } = this.state…}”實現(xiàn)提交表單并上傳文件即可。

react怎么實現(xiàn)文件上傳

本教程操作環(huán)境:Windows10系統(tǒng)、react18.0.0版、Dell G3電腦。

react怎么實現(xiàn)文件上傳?

react使用antd實現(xiàn)手動上傳文件(提交表單)

前言:最近在做一個后臺管理項目涉及到上傳文件,使用antd里的Upload實現(xiàn)上傳文件。記錄一下遇到的問題和坑。

1.要實現(xiàn)的效果

react怎么實現(xiàn)文件上傳

我要實現(xiàn)的效果就是點擊上傳文件,選擇完文件后點擊ok(也就是提交表單后在上傳)其實就是手動上傳文件。下面我來介紹一下我的做法和我遇到的一些坑。

2.實現(xiàn)步驟

1.引入所需antd的部件

import { Table, Button, Modal, Form, Input, Upload, Icon, notification } from 'antd';
登錄后復(fù)制

這個是表單的

 <Modal           title="文件上傳"           visible={this.state.visible}           onOk={this.handleOk} //點擊按鈕提價表單并上傳文件           onCancel={this.handleCancel}         >           <Form layout="vertical" onSubmit={this.handleSubmit}>             <Form.Item>               <div  key={Math.random()}>//點擊關(guān)閉在次打開還會有上次上傳文件的緩存                 <Upload {...props}>                   <Button type="primary">                     <Icon type="upload" />選擇文件                  </Button>                 </Upload>                 </div>             </Form.Item>             <Form.Item label="文件名(可更改)">               {getFieldDecorator('filename', {                 // initialValue:this.state.defEmail,                 rules: [                   {                     message: '請輸入正確的文件名',                     // pattern: /^[0-9]+$/,                   },                   {                     required: true,                     message: '請輸入文件名',                   },                 ],               })(<Input />)}             </Form.Item>             <Form.Item label="描述(選填)">               {getFieldDecorator('describe', {                   rules: [                   {                     message: '描述不能為空',                   },                   {                     required: false,                     message: '請輸入描述',                   },                 ],               })(<TextArea />)}             </Form.Item>             <Form.Item label="文件類型">               {getFieldDecorator('filetype', {                 rules: [                   {                     message: '文件類型',                   },                   {                     required: true,                     message: '文件類型',                   },                 ],               })(<Input disabled={true} />)}             </Form.Item>           </Form>         </Modal>
登錄后復(fù)制

下面的代碼是Upload的props

  const props = {       showUploadList: true,       onRemove: file => {         this.setState(state => {           const index = state.fileList.indexOf(file);           const newFileList = state.fileList.slice();           newFileList.splice(index, 1);           return {             fileList: newFileList,           };         });       },       beforeUpload: file => {         console.log(file)         let { name } = file;         var fileExtension = name.substring(name.lastIndexOf('.') + 1);//截取文件后綴名         this.props.form.setFieldsValue({ 'filename': name, 'filetype': fileExtension });//選擇完文件后把文件名和后綴名自動填入表單         this.setState(state => ({           fileList: [...state.fileList, file],         }));         return false;       },       fileList,     };
登錄后復(fù)制

下面是重點提交表單并上傳文件

handleOk = e => {//點擊ok確認(rèn)上傳     const { fileList } = this.state;     let formData = new FormData();     fileList.forEach(file => {       formData.append('file', file);     });       this.props.form.validateFields((err, values) => { //獲取表單值       let { filename, filetype, describe } = values;       formData.append('name', filename);       formData.append('type', filetype);       formData.append("dir", "1");       if(describe==undefined){         formData.append('description',"");       }else{         formData.append('description',describe);       }              UploadFile(formData).then(res => { //這個是請求         if (res.status == 200 && res.data != undefined) {           notification.success({             message: "上傳成功",             description: res.data,           });         } else {           notification.error({             message: "上傳失敗",             description: res.status,           });         }       })       this.setState({         visible: false       });       })   };
登錄后復(fù)制

注意我用的axios,post必須使用formData.append("接口參數(shù)名",“要傳的值”);如果不想用axios還可以用別的請求

fetch(url, { //fetch請求         method: 'POST',         body: formData,     })                   axios({ //axios         method: 'post',         url: url,         data: formData,         headers:{ //可加可不加           'Content-Type': 'multipart/form-data; boundary=----             WebKitFormBoundary6jwpHyBuz5iALV7b'         }     })     .then(function (response) {         console.log(response);     })     .catch(function (error) {         console.log(error);     });
登錄后復(fù)制

這樣就能實現(xiàn)手動上傳文件了。

3.遇到的坑

第一次選擇完文件,點擊上傳。第二次在打開Model發(fā)現(xiàn)上回的文件列表還在,我在網(wǎng)上找的方法是給upload及一個key值但只有點擊ok后第二次打開Model緩存才會消失,但是點擊canel還會存在。

<div key={Math.random()}>                 <Upload  {...props}>                   <Button type="primary">                     <Icon type="upload" />選擇文件                  </Button>                 </Upload>                 </div>
登錄后復(fù)制

最好的方法就是this.setState把state里文件列表置空

 this.props.form.resetFields()//添加之前把input值清空     this.setState({       visible: true,       fileList: [] //把文件列表清空     });
登錄后復(fù)制

也可以給Modal加一個 destroyOnClose 屬性 關(guān)閉時銷毀 Modal 里的子元素

推薦學(xué)習(xí):《react視頻教程》

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
永久免费看av| 国产精品无码av在线播放| 男人添女荫道口图片| 色撸撸在线观看| 国产 porn| 欧美伦理片在线看| 妺妺窝人体色www在线小说| 糖心vlog在线免费观看| 超碰中文字幕在线观看| 三级av免费看| 992kp免费看片| 国产手机视频在线观看| 成年丰满熟妇午夜免费视频| 秋霞在线一区二区| 免费看日本黄色| 日本福利视频网站| 美女日批免费视频| 91视频免费版污| 国产3p在线播放| 亚洲av综合色区| 水蜜桃色314在线观看| 亚洲自偷自拍熟女另类| 黄色a级片免费| 不用播放器的免费av| 91视频成人免费| 女人和拘做爰正片视频| 57pao国产成永久免费视频| www.69av| 国产三级三级三级看三级| 奇米777在线| 黄色成人在线看| 在线免费视频a| 激情五月六月婷婷| 亚洲精品久久久中文字幕| 91免费版看片| 福利在线一区二区三区| www.男人天堂网| 亚洲一级免费在线观看| www.av蜜桃| 黄色片免费网址| 日韩福利视频在线| 福利视频一区二区三区四区| 鲁一鲁一鲁一鲁一av| 成人精品视频在线播放| 最近中文字幕一区二区| 香港三级韩国三级日本三级| 天堂av手机在线| 亚欧在线免费观看| 霍思燕三级露全乳照| 最新av在线免费观看| 蜜臀av免费观看| 欧美成人xxxxx| 日本精品久久久久久久久久 | 手机在线免费观看毛片| 日韩国产一级片| 精产国品一二三区| 999精品视频在线| 九色在线视频观看| 久艹视频在线免费观看| 影音先锋成人资源网站| 污网站在线免费| 欧美午夜aaaaaa免费视频| 免费午夜视频在线观看| 男人亚洲天堂网| 农村妇女精品一二区| 我的公把我弄高潮了视频| 国产尤物av一区二区三区| 日本一区二区免费高清视频| 亚洲av无日韩毛片久久| 日韩在线一区视频| 91pony九色| 午夜av中文字幕| av电影一区二区三区| 国产91av视频在线观看| 国产免费一区二区三区四在线播放| 国产精品自在自线| 中国 免费 av| 国产传媒久久久| 欧美精品久久久久久久久久久| 欧美图片激情小说| 男人揉女人奶房视频60分| 国产精品视频一区二区三区四区五区| 日韩网址在线观看| 亚洲欧美自拍另类日韩| 99日在线视频| 大片在线观看网站免费收看| www.av蜜桃| 噼里啪啦国语在线观看免费版高清版 | 国产精品亚洲天堂| 狠狠精品干练久久久无码中文字幕| 黄色特一级视频| 成年人视频网站免费观看| 污视频网站观看| 欧美大黑帍在线播放| 免费av观看网址| 欧美wwwwwww| 69久久久久久| 91精品视频国产| 中文字幕色呦呦| 加勒比成人在线| 熟女人妇 成熟妇女系列视频| av免费中文字幕| 在线观看国产中文字幕| 午夜av中文字幕| 蜜桃网站在线观看| 中文字幕av不卡在线| 青青青在线观看视频| 99热一区二区| 少妇性饥渴无码a区免费| 欧洲美女亚洲激情| 88av.com| 国产网站免费在线观看| 色撸撸在线观看| 9久久婷婷国产综合精品性色| 男人添女人下部视频免费| 黑人粗进入欧美aaaaa| 国产天堂视频在线观看| 在线观看视频在线观看| 杨幂毛片午夜性生毛片| 欧美一区二区三区爽大粗免费| 公共露出暴露狂另类av| 在线观看国产福利| 日本黄网站免费| 欧美一区二区三区爽大粗免费| 婷婷视频在线播放| 韩国一区二区在线播放| 亚洲免费999| 91丨九色丨蝌蚪| 国产原创精品在线| 国产精品一区二区羞羞答答| 欧洲熟妇精品视频| 日韩av播放器| 欧美成人免费高清视频| 国产精品无码专区av在线播放| 国产成人艳妇aa视频在线| 欧美黑人在线观看| 大陆av在线播放| 免费在线黄网站| 成人在线观看你懂的| 欧美色图色综合| 男人透女人免费视频| 亚洲福利精品视频| 久久99爱视频| 日本一二区免费| 99视频在线观看视频| 国产精品啪啪啪视频| 欧美日韩dvd| 老太脱裤子让老头玩xxxxx| 免费看又黄又无码的网站| aaa毛片在线观看| 永久免费的av网站| 欧美与动交zoz0z| 日韩精品在线观看av| 中国丰满人妻videoshd| 国产一伦一伦一伦| 国产精品啪啪啪视频| av7777777| 免费看涩涩视频| 伊人再见免费在线观看高清版 | 国产中文字幕视频在线观看| 黄色国产小视频| 一级做a爱视频| 大陆极品少妇内射aaaaa| 99视频在线视频| 国产一区二区片| 香蕉视频网站入口| 欧美日韩中文字幕在线播放| 日韩精品无码一区二区三区免费| 激情文学亚洲色图| 99热亚洲精品| 午夜一级免费视频| 日韩免费视频播放| 无套内谢丰满少妇中文字幕| 成人毛片一区二区| 亚洲精品视频三区| 99色精品视频| 人妻激情另类乱人伦人妻| mm131亚洲精品| 精品无码国模私拍视频| 国产精品波多野结衣| 日韩中文字幕组| 日韩国产一级片| 欧洲金发美女大战黑人| 九色porny自拍| 亚洲中文字幕久久精品无码喷水| 免费看黄色a级片| 午夜一级免费视频| 香港日本韩国三级网站| 北条麻妃在线视频观看| 成人国产在线看| 99热一区二区三区| 一级网站在线观看| 一级黄色在线播放| 欧美日韩中文不卡| 国产精品v日韩精品v在线观看| 日本www在线播放| 人妻夜夜添夜夜无码av| 欧美激情视频免费看| 97超碰在线人人| 国产欧美123|