国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - React - react顯示文件上傳進度的示例

react顯示文件上傳進度的示例

2022-03-03 17:03阿政想暴富 React

這篇文章主要介紹了react顯示文件上傳進度的示例,幫助大家更好的理解和學習使用react,感興趣的朋友可以了解下

Axios 是一個基于 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中。
在使用react, vue框架的時候, 如果需要監聽文件上傳可以使用axios里的onUploadProgress.

react上傳文件顯示進度 demo

前端 快速安裝react應用

?
1
2
3
4
5
6
7
確保有node環境
 
npx create-react-app my-app //當前文件夾創建my-app文件
cd my-app //進入目錄
npm install antd  //安裝antd UI組件
 
npm run start //啟動項目

src-> App.js

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import React from 'react';
import 'antd/dist/antd.css';
import { Upload, message, Button, Progress } from 'antd';
import { UploadOutlined } from '@ant-design/icons';
 
import axios from "axios"
axios.defaults.withCredentials = true
 
class App extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      fileList: [],
      uploading: false,
      filseSize: 0,
      baifenbi: 0
    }
  }
  //文件上傳改變的時候
  configs = {
    headers: { 'Content-Type': 'multipart/form-data' },
    withCredentials: true,
    onUploadProgress: (progress) => {
      console.log(progress);
      let { loaded } = progress
      let { filseSize } = this.state
      console.log(loaded, filseSize);
      let baifenbi = (loaded / filseSize * 100).toFixed(2)
      this.setState({
        baifenbi
      })
    }
  }
  //點擊上傳
  handleUpload = () => {
    const { fileList } = this.state;
    const formData = new FormData();
    fileList.forEach(file => {
      formData.append('files[]', file);
    });
    this.setState({
      uploading: true,
    });
    //請求本地服務
    axios.post("http://127.0.0.1:5000/upload", formData, this.configs).then(res => {
      this.setState({
        baifenbi: 100,
        uploading: false,
        fileList: []
      })
    }).finally(log => {
      console.log(log);
    })
  }
  onchange = (info) => {
    if (info.file.status !== 'uploading') {
      this.setState({
        filseSize: info.file.size,
        baifenbi: 0
      })
    }
    if (info.file.status === 'done') {
      message.success(`${info.file.name} file uploaded successfully`);
    } else if (info.file.status === 'error') {
      message.error(`${info.file.name} file upload failed.`);
    }
  }
 
 
  render() {
    const { uploading, fileList } = this.state;
    const props = {
      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 => {
        this.setState(state => ({
          fileList: [...state.fileList, file],
        }));
        return false;
      },
      fileList,
    };
    return (
      <div style={{ width: "80%", margin: 'auto', padding: 20 }}>
        <h2>{this.state.baifenbi + '%'}</h2>
        <Upload onChange={(e) => { this.onchange(e) }} {...props}>
          <Button>
            <UploadOutlined /> Click to Upload
          </Button>
        </Upload>
        <Button
          type="primary"
          onClick={this.handleUpload}
          disabled={fileList.length === 0}
          loading={uploading}
          style={{ marginTop: 16 }}
        >
          {uploading ? 'Uploading' : 'Start Upload'}
        </Button>
        <Progress style={{ marginTop: 20 }} status={this.state.baifenbi !== 0 ? 'success' : ''} percent={this.state.baifenbi}></Progress>
      </div >
    )
  }
}
 
export default App;

后臺 使用express搭載web服務器

?
1
2
3
4
5
6
7
8
1.先創建文件夾webSever
  cd webSever
  npm -init -y  //創建package.json文件
 
2.安裝express 以及文件上傳需要的包
  npm install express multer ejs
 
3.創建app.js

app.js

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
var express = require('express');
var app = express();
var path = require('path');
var fs = require('fs')
var multer = require('multer')
//設置跨域訪問
app.all("*", function (req, res, next) {
    //設置允許跨域的域名,*代表允許任意域名跨域
    res.header("Access-Control-Allow-Origin", req.headers.origin || '*');
    // //允許的header類型
    res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With");
    // //跨域允許的請求方式
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    // 可以帶cookies
    res.header("Access-Control-Allow-Credentials", true);
    if (req.method == 'OPTIONS') {
        res.sendStatus(200);
    } else {
        next();
    }
})
 
 
app.use(express.static(path.join(__dirname, 'public')));
//模板引擎
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
 
app.get("/", (req, res, next) => {
    res.render("index")
})
//上傳文件
app.post('/upload', (req, res, next) => {
 
    var upload = multer({ dest: 'upload/' }).any();
  
    upload(req, res, err => {
      if (err) {
        console.log(err);
        return
      }
      let file = req.files[0]
      let filname = file.originalname
      var oldPath = file.path
      var newPath = path.join(process.cwd(), "upload/" + new Date().getTime()+filname)
      var src = fs.createReadStream(oldPath);
      var dest = fs.createWriteStream(newPath);
      src.pipe(dest);
      src.on("end", () => {
        let filepath = path.join(process.cwd(), oldPath)
        fs.unlink(filepath, err => {
          if (err) {
            console.log(err);
            return
          }
          res.send("ok")
        })
  
      })
      src.on("error", err => {
        res.end("err")
      })
  
    })
  
  })
  
 
app.use((req, res) => {
    res.send("404")
})
app.listen(5000)

  前端啟動之后,啟動后臺 node app 即可實現 

以上就是react顯示文件上傳進度的示例的詳細內容,更多關于react顯示文件上傳進度的資料請關注服務器之家其它相關文章!

原文鏈接:https://www.cnblogs.com/kongyijilafumi/p/13293409.html

延伸 · 閱讀

精彩推薦
  • ReactReact實現一個高度自適應的虛擬列表

    React實現一個高度自適應的虛擬列表

    這篇文章主要介紹了React如何實現一個高度自適應的虛擬列表,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下...

    抖音前端安全8952022-02-25
  • ReactReact三大屬性之Refs的使用詳解

    React三大屬性之Refs的使用詳解

    這篇文章主要介紹了React三大屬性之Refs的使用詳解,幫助大家更好的理解和學習使用React,感興趣的朋友可以了解下...

    xiaoznz8942022-03-02
  • React詳解React中共享組件邏輯的三種方式

    詳解React中共享組件邏輯的三種方式

    這篇文章主要介紹了詳解React中共享組件邏輯的三種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    Null20203692022-01-12
  • React一份全面的React、Angular和Vue.js比較指南

    一份全面的React、Angular和Vue.js比較指南

    首先讓我們看看來自于Google趨勢的有關React、Angular和Vue.js的對比。就過去一年的情況而言,Angular***,React名列其后,而Vue.js所占份額則最少。...

    51CTO5422022-02-23
  • React從框架作者角度聊:React調度算法的迭代過程

    從框架作者角度聊:React調度算法的迭代過程

    React內部最難理解的地方就是「調度算法」,不僅抽象、復雜,還重構了一次。可以說,只有React團隊自己才能完全理解這套算法。既然這樣,那本文嘗試從...

    魔術師卡頌8172022-01-10
  • ReactReact 錯誤邊界組件的處理

    React 錯誤邊界組件的處理

    這篇文章主要介紹了React 錯誤邊界組件的處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨...

    xuxiaowei8552022-02-28
  • React淺談react路由傳參的幾種方式

    淺談react路由傳參的幾種方式

    這篇文章主要介紹了淺談react路由傳參的幾種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下...

    glorydx4622022-02-20
  • ReactReact+Ant Design開發環境搭建的實現步驟

    React+Ant Design開發環境搭建的實現步驟

    這篇文章主要介紹了React+Ant Design開發環境搭建的實現步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    qq_3341488311842022-02-24
主站蜘蛛池模板: 成人免费黄色 | av中文在线播放 | 国产精品99久久久久久久女警 | 精品国产91乱码一区二区三区 | 欧美天天 | 最近中文字幕免费观看 | 在线观看欧美日韩 | 亚洲天堂2020 | аⅴ资源新版在线天堂 | 成a人片在线观看 | 日日干夜夜操 | 日本精品在线播放 | 日本在线视频免费观看 | 日日摸夜夜添夜夜添高潮视频 | 精品国产乱码久久久久久影片 | 99精品视频一区二区三区 | 亚洲乱码国产乱码精品精软件 | 99国产精品99久久久久久 | 欧美久久精品 | 亚洲乱码国产乱码精品精98午夜 | 中文在线一区 | 国产免费视频在线 | 成人瑟瑟| 欧洲精品一区 | 亚洲国产高清在线 | 久久精彩视频 | 这里只有精品视频 | 欧美精品一区二区在线观看 | 综合色久 | 欧美成人激情视频 | 国产又色又爽又黄 | 中文字幕一二三区 | 日本不卡免费一区二区三区综合久久 | 午夜精品在线 | 国产精品久久国产精品 | 激情综合色综合久久综合 | 毛片在线免费播放 | 国产不卡精品视频 | 一本大道专区 | 亚洲欧美日韩在线 | 精品无码三级在线观看视频 |