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

站長資訊網(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)手動上傳文件(提交表單)

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

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

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

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

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)閉在次打開還會有上次上傳文件的緩存                 <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ù)制

下面是重點(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è)是請求         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ù)制

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

3.遇到的坑

第一次選擇完文件,點(diǎn)擊上傳。第二次在打開Model發(fā)現(xiàn)上回的文件列表還在,我在網(wǎng)上找的方法是給upload及一個(gè)key值但只有點(diǎn)擊ok后第二次打開Model緩存才會消失,但是點(diǎn)擊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加一個(gè) destroyOnClose 屬性 關(guān)閉時(shí)銷毀 Modal 里的子元素

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

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
黑人大性殖器大战欧美白妇| 国产在线内射婷婷| 中文在线无码高潮潮喷在线播放 | 日本熟妇人妻XXXX| 老熟女另类XXX精品视频| 狠狠色丁香婷婷综合潮喷| 国产精品无码DVD在线观看| 丰满人爽人妻AXXXXHD| GOGO全球高清专业大尺度摄影| 野花新免费高清完整在线观看| 亚洲乱码一区二区三区在线观看| 亚洲AV无码乱码在线| 午夜欧美精品久久久久久久| 手机在线看永久AV片免费| 日本又黄又爽又色又刺激的视频| 无码A级毛片日韩精品| 天堂VA在线高清一区| 双腿张开被9个男人调教| 搡老女人熟妇老太HD| 日韩午夜理论片 中文字幕| 色8久久人人97超碰香蕉987| 亚洲AⅤ天堂AV天堂无码APP| 小SB是不是想被C了| 性少妇SEXVIDEOS高清| 午夜无码片在线观看影院中文| 亚洲人成伊人成综合网久久久| 亚洲视频在线观看| 野花香日本大全免费观看| 亚洲中字无码AV电影在线观看| 亚洲乱码日产精品BD在线下载| 99无人区码一码二码三码| CAOPORM-超频在线视频| 爱情岛亚洲AV永久入口首页| 成人综合激情另类小说| 寡妇下面好黑好毛| 国产精品毛片无码一区二区蜜桃| 国产精品美女久久久久久2018| 久久久久久久久久久综合日本 | 夜夜躁日日躁狠狠久久AV| 锕锕锕锕锕锕好多水APP网站| А√中文在线资源库| 国产中文欧美日韩在线| 精品人妻少妇嫩草av无码专区| 久久高清内射无套| 美女露0裸体无档动态视频| 女特警被三四个黑人糟蹋| 人人添人人妻人人爽频| 四虎成人精品无码| 一本到高清视频在线观看丶| 公交车大龟廷进我身体里视频| 国产人成无码视频在线观看| 娇妻被朋友在客厅呻吟动漫| 久久久久久亚洲精品不卡| 久久国产中文娱乐网| 老子午夜理论影院理论| 少妇寂寞难耐被黑人中出| 小13箩利洗澡无码视频网站| 97人洗澡人人澡人人爽人人模| 大陆熟妇丰满多毛XXXX| 国精品无码一区二区三区在线| 欧美午夜精品久久久久久浪潮| 丝袜灬啊灬快灬高潮了AV| 一区二区三区鲁丝不卡麻豆| 扒开腿狂躁女人爽出白浆| 精品成人AV一区二区三区| 蜜芽久久人人超碰爱香蕉| 人妻中文字幕AV无码专区| 无码人妻精品一区二区三区9厂| 亚洲AV无码午夜嘿嘿嘿| 超薄丝袜足J好爽在线观看| 国产偷窥熟女精品视频大全| 旧里番美熟妇1一2集| 日韩爆乳一区二区无码| 亚洲AV无码成人精品区明星换面| 被老汉耸动呻吟双性美人| 国产亚洲欧美精品久久久| 麻豆精品久久久久久久99蜜桃 | JAPANESE日本护士HD| 久久久久久国产精品无码下载 | 国产偷国产偷亚州清高APP| 日本熟妇人妻XXXXX视频| 中文字幕在线亚洲日韩6页| 成人综合婷婷国产精品久久蜜臀 | 国产日产欧产精品| 日韩一区二区三区精品视频| 亚洲第一狼人伊人AV| 99国产精品白浆无码流出| 精品亚洲麻豆1区2区3区| 欧美又粗又长XXXXBBBB疯| 香蕉免费一区二区三区| 纯爱无遮挡H肉动漫在线播放| 精品九九人人做人人爱| 午夜成人亚洲理伦片在线观看| 尤物娇妻被NP高H| 公么大龟弄得我好舒服第一| 强行征服邻居人妻| 亚洲国产不卡久久久久久| H工口全彩里番库18禁无遮挡 | 野花视频在线观看免费高清版| 韩国三级在线观看完整版| 小BBW小BBW小BBW小| 国产成人久久精品| 久久婷婷五月综合色俺也想去| 色AV综合AV无码AV网站| AV人摸人人人澡人人超碰手机版| 国产在线无码视频一区二区三区 | 人妻少妇久久久久久97人妻| 亚洲AV永久天码精品天堂DL| 锕锕锕锕锕锕好多水APP网站 | 涩爱AV挺进少妇张开双暴躁| 成人精品视频一区二区三区不卡| 久久99精品久久久久久国产 | 50岁退休熟女露脸高潮| 国产精品久久国产精品99 | 中文乱码人妻一区二区三区视频| 久久精品久久精品中文字幕| 熟妇人妻少妇精品欧美视频| 厨房里挺进岳丰满大屁股| 日本在线人数最多的MMORPG| 波多野结系列18部无码观看A| 久久人人爽人人爽人人片AV超碰 | 成A人片亚洲日本久久| 日本肉体裸交XXXXBBBB| 成人无码区免费A∨视频| 色噜噜狠狠色综合AV妖精| 波多野结衣 美乳人妻| 色五月丁香五月综合五月4438| 真人做受试看120分钟小视频| 国产女人水真多18毛片18精品 | 伊人色综合一区二区三区| 国产熟女一区二区| 亚洲AⅤ精品一区二区三区| 黑料不打烊吃瓜爆料| 亚洲精品AⅤ无码精品| 国产精品视频一区二区三区无码| 五月丁香六月缴情基地| 国精产品一区一区三区M| 亚洲成A人片在线观看天堂| 久久99国产精品久久99蜜桃| 亚洲色成人www在线观看| 巨胸狂喷奶水WWW自慰网站| 69SEX久久精品国产麻豆| 人妻熟妇久久久久久精品无码专区| 被带到调教室刑床惩罚挠痒痒作文| 日日碰狠狠添天天爽| 国产精品丝袜一区二区三区| 亚洲国产制服丝袜先锋| 老头发狂的吸住她的乳尖| JZZIJZZIJ亚洲成熟少妇| 免费人成视频XVIDEOS| 亚洲午夜国产精品无码| 国精产品一区二区三区| 亚洲午夜无码久久久久蜜臀AV| 美女内射毛片在线看| 锕锕锕锕锕锕好爽视频软件| 手机成人免费A级毛片无码| 国产又黄又爽又刺激的免费网址| 亚洲国产天堂久久综合网| 蜜桃女同一区二区免费AV哟| 白嫩少妇BBW撒尿视频| 无码人妻一区二区三区一| 久久97精品久久久久久久不卡| 中文精品一卡2卡3卡4卡| 人妻夜夜爽天天爽三区| 国产免费人成在线视频| 无码一区二区三区AV免费| 国产精东天美AV影业传媒| 少妇粗大进出白浆嘿嘿视频| 国产午夜亚洲精品国产成人小说| 亚洲性色AV片在线观看网址| 欧美老肥妇多毛XXXXX| JIZZJIZZ日本护士视频| 四虎影视国产精品久久| 放学后的特殊教育桃子移植| 日日噜噜夜夜狠狠视频 | 无码中文亚洲AV吉吉影音先锋 | 狠狠精品干练久久久无码中文字幕 | 久久久久亚洲AV成人网| 草草地址线路①屁屁影院成人| 亚洲AV成人片无码| 麻豆国产成人AV高清在线| 放荡大屁股少妇高潮喷水| 亚洲熟妇丰满美女XXXXX| 人妻无码一区二区三区蜜桃| 国产在线精品无码二区| 99精品视频一区在线观看| 无码人妻啪啪一区二区| 旅游途中夫妻换着玩的说说搞笑| 丰满岳乱妇在线观看中字无码| 亚洲色偷拍一区二区三区| 日本在线视频WWW色| 久久国内精品一区二区三区| 成人亚洲AV网站在线看AAAA| 亚洲熟妇色XXXXX爽| 日本XXXX色视频在线播放| 精品视频一区二区三区在线观看| 亚洲日韩在线A视频在线观看| 免费一区二区三区成人免费视频| AV无码一区二区大桥未久| 无遮挡十八禁污污网站免费|