成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

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

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

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

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

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

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

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

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

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

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

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

2.實(shí)現(xiàn)步驟

1.引入所需antd的部件

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

這個(gè)是表單的

 <Modal           title="文件上傳"           visible={this.state.visible}           onOk={this.handleOk} //點(diǎn)擊按鈕提價(jià)表單并上傳文件           onCancel={this.handleCancel}         >           <Form layout="vertical" onSubmit={this.handleSubmit}>             <Form.Item>               <div  key={Math.random()}>//點(diǎn)擊關(guān)閉在次打開還會(huì)有上次上傳文件的緩存                 <Upload {...props}>                   <Button type="primary">                     <Icon type="upload" />選擇文件                  </Button>                 </Upload>                 </div>             </Form.Item>             <Form.Item label="文件名(可更改)">               {getFieldDecorator('filename', {                 // initialValue:this.state.defEmail,                 rules: [                   {                     message: '請(qǐng)輸入正確的文件名',                     // pattern: /^[0-9]+$/,                   },                   {                     required: true,                     message: '請(qǐng)輸入文件名',                   },                 ],               })(<Input />)}             </Form.Item>             <Form.Item label="描述(選填)">               {getFieldDecorator('describe', {                   rules: [                   {                     message: '描述不能為空',                   },                   {                     required: false,                     message: '請(qǐng)輸入描述',                   },                 ],               })(<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 });//選擇完文件后把文件名和后綴名自動(dòng)填入表單         this.setState(state => ({           fileList: [...state.fileList, file],         }));         return false;       },       fileList,     };
登錄后復(fù)制

下面是重點(diǎn)提交表單并上傳文件

handleOk = e => {//點(diǎn)擊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 => { //這個(gè)是請(qǐng)求         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還可以用別的請(qǐng)求

fetch(url, { //fetch請(qǐng)求         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ù)制

這樣就能實(shí)現(xiàn)手動(dòng)上傳文件了。

3.遇到的坑

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

<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加一個(gè) destroyOnClose 屬性 關(guān)閉時(shí)銷毀 Modal 里的子元素

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

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
亚洲精品成人在线| 在线播放国产不卡免费视频| 亚洲欧洲综合有码无码| 一边摸一边抽搐一进一出视频| 亚洲色在线无码国产精品不卡 | 久久国产精品无码HDAV| 久久蜜桃86人妻arvi| 欧美黑人又粗又大久久久| 日本熟妇人妻中出| 午夜天堂AV天堂久久久| 亚洲日韩久久综合中文字幕| 中文成人无字幕乱码精品区| 啊轻点内射在线视频| 国产丰满麻豆VIDEOSSEX| 护士扒下内裤让我爽一夜| 麻豆国产96在线日韩麻豆| 日本XXXX少妇高清HD| 午夜亚洲AV永久无码精品| 亚洲永久无码3D动漫一区| BBwBBw高潮喷水日本少妇自| 丰满熟妇乱又伦在线无码视频| 国产亚洲一区二区手机在线观看| 久久寂寞少妇成人内射| 欧美私人家庭影院| 无码少妇一区二区三区芒果| 亚洲中文字幕久久精品无码APP| JAPANESEⅩⅩⅩHD日本| 无码成A∧人片在线播放| 亚洲国产成人片在线观看无码| 中文无码久久精品| 国产成人精品福利一区二区三区| 精品国产一区二区三区AV片| 欧美精品偷自拍另类在线观看 | 欧美最猛黑人XXXXWWW| 蜜芽亚洲AV无码精品国产午夜| 日产无码精品一区二区三区| 亚洲AV日韩精品久久久久久A| √天堂资源BT在线官网| 中文字幕亚洲无线码在线一区| 丰满饱满极品熟妇XXXX| 九九真实偷窥短视频| 久久久久久国产精品无码超碰| 全球AV集中精品导航福利| 香蕉免费一区二区三区在| 中文字幕无码乱码人妻系列蜜桃| 国产成人MV视频在线观看| 久久久久免费精品国产| 熟女亚洲综合精品伊人久久| 野花免费观看日本电视剧| 成人亚洲AV网站在线看AAAA| 久久99久久99精品免观看| 日本免费黄色网址| 亚洲午夜精品久久久久久APP | 亚洲中文欧美在线视频| 成人毛片100免费观看| 久久99精品久久久久久不卡| 日韩 无码 偷拍 中文字幕| 亚洲欧美V国产一区二区| 成人av在线网站| 久久人人爽人人爽人人片AV高清| 少妇太爽丰满一区二区| 最新精品国偷自产在线婷婷| 国产无套粉嫩白浆在线| 欧美乱码卡1卡2卡三卡四卡 | 无码AV中文字幕久久AV| 综合图区亚洲另类偷窥| 国精产品W灬源码1688在线| 人妻丰满熟妇AV无码| 亚洲色帝国综合婷婷久久| 国产成人亚洲精品| 欧美日韩午夜群交多人轮换| 亚洲欧美另类在线观看| 国产成人毛片在线视频| 男人扒开女人下部添高潮的视频| 亚洲HAIRY多毛PICS大全| 村长用力挺进她的花苞啥电视| 狂猛欧美激情性XXXX大豆行情| 无套内内射视频网站| 八戒电影电影网电影网| 老头握住校花的双乳| 人妻被按摩师玩弄到潮喷| 亚洲一区波多野结衣在线APP| 国产精品V欧美精品∨日韩| 人妻少妇偷人精品视频| 中文无码人妻影音先锋| 精品国内自产拍在线观看| 偷窥妇科TUBESEX妇| ZEESEA在日本| 麻豆国产精品VA在线观看不卡 | 国内揄拍国内精品人妻浪潮AV| 日韩一区二区三区人妻系列 | 亚洲综合激情五月丁香六月| 国产女人高潮抽搐喷水嗷嗷叫| 日本少妇ASS浓精PICS| 51CG吃瓜网热心朝阳群众| 久久精品女人天堂AV免费观看| 性丰满ⅩXXOOOZZXXHD| 国产 精品 自在自线| 日本高清在线观看视频WWW色| 51成品网站W灬源码1688| 久久久久久久久久国产精品免费| 亚洲AV无码天堂一区二区三区| 国产ZLJZLJZLJZLJ| 乳揉みま痴汉电车中文字幕| 八区精品色欲人妻综合网| 欧美AAAAAA级午夜福利视频| 又色又爽又黄18禁美女裸身无遮| 久久精品爆乳熟妇AV-区| 亚洲成AV人在线观看| 国产亚洲精品A在线观看APP| 天天躁恨恨躁夜躁2020| 多毛BGMBGMBGM胖在| 日本精品一线二线三线区别在哪里| 97超碰中文字幕久久精品| 毛茸茸的中国女BBW| 在床上拔萝卜又疼又叫什么症状| 精品熟妇无码av免费久久| 亚洲国产成人一区二区三区| 国产精品普通话国语对白露脸| 少妇呻吟翘臀后进爆白浆| 乖我们在办公室试试| 少妇被粗大的猛烈的进出69影院| 成视频年人黄网站免费视频| 日产无人区一线二线三线小| 拔萝卜全程不该盖被子怎么办| 欧洲亚洲1卡二卡三卡2021| BDB14黑人巨大视频| 欧美性猛交XXXX乱大交蜜桃| HEYZO无码综合国产精品| 欧洲-级毛片内射| 波多野结衣中文字幕免费视频| 人人爽人人澡人人人妻| 丁香婷婷激情俺也去俺来也| 日本理伦片午夜理伦片| 粗了大了 整进去好爽视频| 上边一面亲下边一面膜的功效| 丰满少妇人妻XXXXX| 偷拍亚洲另类无码专区制服| 国产精品无码综合区| 亚洲AV成人片无码网站网| 狠狠色婷婷久久一区二区三区| 亚洲男人AV天堂午夜在| 久久久久亚洲AV片无码| 重生后我抛弃了负心公主| 欧美成人看片黄A免费看| 凹凸在线无码免费视频| 少妇荡乳情欲办公室456视频| 国产精品久久久久久一区二区三区| 性VODAFONEWIFI另类| 精品国产一区二区三区不卡在线| 亚洲中文成人中文字幕| 免费男人下部进女人下部视频| JEANASIS日本| 少妇夜夜春夜夜爽试看视频| 国产日产欧洲无码视频| 亚洲精品无码久久| 麻花豆传媒剧国产MV免费天美 | 漂亮人妻洗澡被公强 日日躁| 刺激战场未满十八岁能玩多久 | 成人无码视频免费播放| 无码VA在线观看| 好吊妞人成视频在线观看强行| 又色又爽又黄的裸体美女图片 | 亚洲成AV人片在线观看福利| 妺妺窝人体色77777777| 国产激情一区二区三区成人| 一面亲上边一面膜下边56| 色哟哟网站在线观看| 久久久久久久精品成人热蜜桃| 啊灬啊灬啊灬快灬高潮了女 | 野花高清完整版免费观看视频电视| 男男AV纯肉无码免费播放无码| 成人精品一区二区三区电影| 午夜爽爽爽男女污污污网站 | 精品卡一卡二卡3卡高清乱码| 中文精品无码中文字幕无码专区| 欧美性色欧美A在线播放| 国产 | 欧洲野花视频欧洲1| 亚洲国产精品久久久久网站| 男女无遮挡猛进猛出免费视频 | 爆乳无码AV一区二区三区小说| 无码少妇一区二区浪潮av| 久久亚洲精品成人AV无码网站 | 纯肉无遮挡H肉动漫在线观看3D| 亚洲AV成人片色在线观看高潮| 麻豆一区二区三区精品视频| 顶级RAPPER潮水日本| 亚洲精品无码7777| 欧美日韩国产A∨| 国产乱人伦偷精品视频| 岳又紧又嫩又多水好爽| 色综合久久精品亚洲国产消防 | 国产精品无码午夜免费影院| 野花社区高清在线观看视频| 日产2021一二三四免费| 后入骚妇内射AV| 差差差很疼视频30分钟无掩盖| 亚洲精品无码你懂的| 日韩免费无码专区精品观看| 97在线视频免费观看|