久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久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號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
免费在线观看一区| 天堂俺去俺来也www久久婷婷| 日本欧美大码aⅴ在线播放| 久久亚洲色图| 日本亚洲最大的色成网站www | 中文一区一区三区免费在线观 | 日本不卡的三区四区五区| 亚洲免费一区三区| 亚洲精品日本| 国产麻豆精品| 福利一区和二区| 亚洲三级欧美| 欧美.日韩.国产.一区.二区| 激情久久婷婷| 亚洲视频播放| 日韩三级久久| 欧美1区2区3| 日本欧美不卡| 国产精品社区| 欧美日韩亚洲一区在线观看| 国产欧美激情| av免费不卡国产观看| 色在线视频观看| 欧美精品一区二区久久| 99国产精品视频免费观看一公开| 免费看黄色91| 国产精品调教| 波多视频一区| 亚洲免费中文| 久久国产麻豆精品| 鲁鲁在线中文| 亚洲综合电影一区二区三区| 欧美日一区二区在线观看| 国产成人精品福利| 欧美日韩激情| 日韩成人午夜精品| 91免费精品| 91久久黄色| 国产伦乱精品| 久久精品影视| 五月亚洲婷婷 | 国精品一区二区| 日本成人中文字幕在线视频| 欧美极品一区二区三区| 欧美日韩在线二区| 日韩激情一二三区| 激情亚洲影院在线观看| 在线精品亚洲| 精品91福利视频| 丝瓜av网站精品一区二区| 欧美激情五月| 国产精品美女久久久| 老司机精品视频在线播放| 亚洲国内精品| 国产精品大片| 最新亚洲激情| 国产精品久久久免费| 亚洲午夜av| 日韩高清国产一区在线| 精品捆绑调教一区二区三区| 日本久久一区| 五月天久久网站| 麻豆国产精品777777在线| 9国产精品视频| 精品少妇av| 亚洲一二三区视频| 欧美男人天堂| 欧美永久精品| 亚洲激情国产| 高清不卡一区| 97久久亚洲| 日韩亚洲国产欧美| 国产精品蜜芽在线观看| 美女精品一区| 国产欧洲在线| 欧美激情五月| 日本一区二区三区中文字幕| 久久精品高清| 精品精品99| 欧美精品中文| 亚洲日产av中文字幕| 好吊日精品视频| 成人美女视频| 另类综合日韩欧美亚洲| 日韩和欧美的一区| 免费看黄色91| 欧美搞黄网站| 成人精品亚洲| 嫩草伊人久久精品少妇av杨幂| 三级在线观看一区二区| 极品日韩av| 久久国产中文字幕| 亚洲黄色免费看| 国产一区二区三区网| 国产精品亚洲人成在99www| 亚洲美女久久| 亚洲人妖在线| 亚洲伊人精品酒店| 天堂av在线一区| 亚洲免费精品| 欧美亚洲在线日韩| 电影亚洲精品噜噜在线观看| 国产成人精品三级高清久久91| 91亚洲无吗| 亚洲啊v在线免费视频| 亚洲一区欧美二区| 国产日韩综合| 巨乳诱惑日韩免费av| 国产精品日本| 一区在线视频观看| 香蕉久久99| 欧美久久精品一级c片| 久久中文字幕二区| 国产99亚洲| 亚洲福利一区| 激情欧美丁香| 欧美精品一区二区久久| 国产精品av一区二区| 国产亚洲一区二区手机在线观看 | 蜜臀av在线播放一区二区三区 | 国产真实久久| 1000部精品久久久久久久久| 精品日韩视频| 99国产精品免费视频观看| 久久久久99| 欧美成人日韩| 日韩视频在线一区二区三区| 99视频精品| 一区二区三区网站| 视频一区在线视频| 日韩一区二区三区四区五区| 欧美一区不卡| 国产精品成人国产| 精品视频91| 欧美男人天堂| 蜜桃国内精品久久久久软件9| 午夜日韩福利| 香蕉久久国产| 日韩精品亚洲专区在线观看| 国产毛片久久久| 精品国产一区二区三区av片| 麻豆精品国产91久久久久久| 久久精品色播| 久久久久免费av| 日本欧美在线看| 亚洲精品自拍| 国产精品亚洲人成在99www| 精品三区视频| 亚洲五月婷婷| 亚洲另类黄色| 老鸭窝一区二区久久精品| 国产传媒在线观看| 欧美日韩少妇| 欧美精品三级在线| 成人在线免费观看91| 99久久激情| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩国产欧美三级| 国产精品99在线观看| 99国产精品| 国产精品一区二区三区美女| 久久电影tv| 野花国产精品入口| 日韩av电影一区| 中文字幕高清在线播放| 亚洲一区亚洲| 久久中文字幕一区二区三区| 精品亚洲美女网站| 国产综合婷婷| 国产欧美一区二区色老头| 久久国产欧美| 中文字幕一区二区精品区| 精品三级久久久| 一本一本久久| 精品一区二区三区中文字幕 | 久久九九国产| 日韩精品一页| 日韩国产网站| 日韩av电影一区| 国产99久久久国产精品成人免费| 亚洲日本国产| 日韩在线观看一区| 久久夜色精品| 精品久久久亚洲| 中文字幕一区二区av| 国产传媒在线| 亚州欧美在线| 日韩另类视频| 国产亚洲欧美日韩在线观看一区二区 | 精品久久久网| 美女网站久久| 亚洲女同av| 天海翼亚洲一区二区三区| 国产美女高潮在线| 日韩高清在线不卡| 激情欧美一区二区三区| 免费在线欧美黄色| 视频一区中文字幕国产| 天堂а√在线最新版中文在线| 日韩av电影一区|