久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

react怎么實現文件上傳

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

react怎么實現文件上傳

本教程操作環境:Windows10系統、react18.0.0版、Dell G3電腦。

react怎么實現文件上傳?

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

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

1.要實現的效果

react怎么實現文件上傳

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

2.實現步驟

1.引入所需antd的部件

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

這個是表單的

 <Modal           title="文件上傳"           visible={this.state.visible}           onOk={this.handleOk} //點擊按鈕提價表單并上傳文件           onCancel={this.handleCancel}         >           <Form layout="vertical" onSubmit={this.handleSubmit}>             <Form.Item>               <div  key={Math.random()}>//點擊關閉在次打開還會有上次上傳文件的緩存                 <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>
登錄后復制

下面的代碼是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,     };
登錄后復制

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

handleOk = e => {//點擊ok確認上傳     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       });       })   };
登錄后復制

注意我用的axios,post必須使用formData.append("接口參數名",“要傳的值”);如果不想用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);     });
登錄后復制

這樣就能實現手動上傳文件了。

3.遇到的坑

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

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

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

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

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

推薦學習:《react視頻教程》

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
福利在线免费视频| 久久中文字幕av| 日韩一区二区三区在线看| 久久高清国产| 免费人成黄页网站在线一区二区| 久久亚洲美女| 四虎4545www国产精品| 亚洲午夜91| 亚洲精品亚洲人成在线观看| 日韩一区二区三区精品| 国产精品极品国产中出| 国内一区二区三区| 欧美日韩中文一区二区| 美女精品在线观看| 国产欧美69| 激情国产在线| 国产欧美日韩精品一区二区三区| 高清久久一区| 久久国产66| 欧美一区91| av资源中文在线| 亚洲一区欧美二区| 国产欧美一区二区色老头| 日韩久久电影| 亚洲免费观看高清完整版在线观| 久久精品一区二区三区中文字幕| 免费精品国产| 国产精品1luya在线播放| 中文字幕在线视频网站| 香蕉视频成人在线观看| 国产精品久久久久久久久免费高清 | 精品久久电影| japanese国产精品| 欧美视频久久| 秋霞影院一区二区三区| 免费日本视频一区| 国产精品不卡| 最新国产精品| 婷婷综合六月| 国产亚洲精aa在线看| 在线日韩中文| 欧美激情 亚洲a∨综合| 午夜在线精品| 视频在线不卡免费观看| 亚洲欧美久久久| 国内精品伊人| 午夜久久av| 91成人精品| 成人一区而且| 日韩国产高清在线| 国内精品福利| 成人污污视频| 亚洲理论在线| 午夜视频精品| 高清一区二区三区| 奇米色欧美一区二区三区| 国产在线日韩| zzzwww在线看片免费| 久久激情五月婷婷| 国产视频一区欧美| 伊伊综合在线| 国产精品地址| 亚洲人亚洲人色久| 国产精品日韩| 99精品网站| 国产精品久久观看| 国产精品一区二区三区www| 久久一二三区| 怡红院精品视频在线观看极品| 国产精品成人一区二区不卡| 国产欧美日韩亚洲一区二区三区| 亚洲欧美在线综合| 中文在线不卡| 91精品久久久久久久久久不卡| 久久国产欧美日韩精品| 香蕉久久久久久久av网站| 国产91一区| 韩国久久久久久| 精品理论电影在线| 国产精品第一| 国产欧美日韩影院| 久久国产电影| 美女精品一区二区| 国产一区二区三区四区大秀| 日韩国产专区| 欧美日本不卡高清| 91成人精品| 国产在线不卡| 欧美国产专区| 婷婷中文字幕一区| 亚洲综合激情在线| 精品三级在线| 精品三级国产| 日韩一级网站| 极品日韩av| 欧美中文一区二区| 91精品一区二区三区综合在线爱| 伊人久久在线| 蜜桃成人av| 国产精品毛片在线| 国产一区二区精品| 亚洲精品成a人ⅴ香蕉片| 日韩精品亚洲一区二区三区免费| 亚洲欧美日本国产| 亚洲三级视频| 日本视频中文字幕一区二区三区| 日本v片在线高清不卡在线观看| 一区二区三区四区日韩| 日本成人一区二区| 国产精品亚洲综合在线观看| 卡一卡二国产精品| 日韩国产一区二区| aa亚洲婷婷| 亚洲日产国产精品| 国产精品国码视频| 午夜久久中文| 亚洲激情黄色| 日韩精品导航| 日韩国产一二三区| 精品三区视频| 日韩一区自拍| 久久午夜精品一区二区| 日韩1区2区日韩1区2区| 久久亚洲精品中文字幕| 欧美二三四区| 模特精品在线| 国产精品一区高清| 伊人久久高清| 国产精品毛片| 国产极品一区| 久久美女性网| 亚洲免费成人av在线| 久久麻豆视频| 在线日韩欧美| 国产乱码精品一区二区三区亚洲人 | 在线看片一区| 麻豆一区在线| 婷婷激情久久| 日本午夜精品久久久久| 天堂中文在线播放| 亚洲精品一二三**| 国产一区二区三区探花| 91精品高清| 国产精品超碰| 国产精品蜜芽在线观看| 国产精品普通话对白| 精品亚洲成人| 另类av一区二区| 九九99久久精品在免费线bt| 欧美久久精品一级c片| 日本不卡视频一二三区| 日韩电影免费网址| 日韩激情网站| 国产亚洲一区二区手机在线观看 | 麻豆久久久久久| 日韩精品影视| 国产精品日韩精品在线播放| 婷婷中文字幕一区| 精品三级av在线导航| 一区二区国产精品| 亲子伦视频一区二区三区| 欧美一区二区三区免费看| 亚洲黑丝一区二区| 久久精品二区亚洲w码| 蜜桃视频免费观看一区| 九九精品调教| 你懂的国产精品永久在线| 蜜臀av亚洲一区中文字幕| 天堂√中文最新版在线| 国产日韩免费| 亚洲精品成人| 天堂av在线| 美女在线视频一区| 日本在线成人| 亚洲黄页一区| 日本在线精品| 精品国产一区二| 日韩三级视频| 国产精品视区| 久久一级电影| 樱桃视频成人在线观看| 久久91视频| 国产精品久久乐| 奇米色欧美一区二区三区| 日韩在线一二三区| 日韩一区二区在线免费| 久久中文在线| 麻豆精品在线观看| 欧美午夜三级| 日韩av在线免费观看不卡| 综合干狼人综合首页| 亚洲精品国产偷自在线观看| 久久久夜夜夜| 久久精品91| 久久国产日本精品| 久久久久中文| 91精品国产成人观看| 中文另类视频| 亚洲一级影院| 亚洲精品一区二区妖精|