ファイルのアップロードの進行状況を示す React の例

ファイルのアップロードの進行状況を示す React の例

Axios は、ブラウザと node.js で使用できる promise ベースの HTTP ライブラリです。
react または vue フレームワークを使用しているときに、ファイルのアップロードを監視する必要がある場合は、axios で onUploadProgress を使用できます。

React アップロードファイル表示の進行状況デモ

フロントエンドにReactアプリケーションを素早くインストールする

ノード環境があることを確認してください npx create-react-app my-app //現在のフォルダにmy-appファイルを作成します cd my-app //ディレクトリに入ります npm install antd //antd UIコンポーネントをインストールします npm run start //プロジェクトを開始します

src->App.js

'react' から React をインポートします。
'antd/dist/antd.css' をインポートします。
'antd' から { Upload、message、Button、Progress } をインポートします。
'@ant-design/icons' から UploadOutlined をインポートします。

「axios」からaxiosをインポートします
axios.defaults.withCredentials = true

クラスAppはReact.Componentを拡張します。
  コンストラクタ(props) {
    スーパー(小道具)
    この状態 = {
      ファイルリスト: [],
      アップロード中: false、
      ファイルサイズ: 0,
      バイフェンビ: 0
    }
  }
  //ファイルのアップロードが変更された場合、configs = {
    ヘッダー: { 'Content-Type': 'multipart/form-data' },
    資格情報: true、
    onUploadProgress: (進行状況) => {
      console.log(進行状況);
      let { loaded } = 進捗
      { ファイルサイズ } = this.state とします
      console.log(読み込まれました、ファイルサイズ);
      baifenbi = (loaded / filseSize * 100).toFixed(2) とします。
      this.setState({
        バイフェンビ
      })
    }
  }
  //クリックしてアップロードします handleUpload = () => {
    const { fileList } = this.state;
    フォームデータを作成します。
    fileList.forEach(ファイル => {
      formData.append('files[]', ファイル);
    });
    this.setState({
      アップロード中: true、
    });
    //ローカル サービスをリクエスト axios.post("http://127.0.0.1:5000/upload", formData, this.configs).then(res => {
      this.setState({
        価格: 100,
        アップロード中: false、
        ファイルリスト: []
      })
    }).finally(ログ => {
      コンソールにログを出力します。
    })
  }
  onchange = (情報) => {
    if (info.file.status !== 'アップロード中') {
      this.setState({
        ファイルサイズ: info.file.size、
        バイフェンビ: 0
      })
    }
    if (info.file.status === '完了') {
      message.success(`${info.file.name} ファイルが正常にアップロードされました`);
    } そうでない場合 (info.file.status === 'error') {
      message.error(`${info.file.name} ファイルのアップロードに失敗しました。`);
    }
  }


  与える() {
    const { アップロード中、fileList } = this.state;
    定数プロパティ = {
      onRemove: ファイル => {
        this.setState(状態 => {
          定数インデックス = state.fileList.indexOf(ファイル);
          const newFileList = state.fileList.slice();
          新しいファイルリストをスプライスします(インデックス、1);
          戻る {
            ファイルリスト: 新しいファイルリスト、
          };
        });
      },
      アップロード前: ファイル => {
        this.setState(状態 => ({
          ファイルリスト: [...state.fileList, ファイル],
        }));
        false を返します。
      },
      ファイルリスト、
    };
    戻る (
      <div style={{ width: "80%", margin: 'auto', padding: 20 }}>
        <h2>{this.state.baifenbi + '%'}</h2>
        <アップロード onChange={(e) => { this.onchange(e) }} {...props}>
          <ボタン>
            <UploadOutlined /> クリックしてアップロード
          </ボタン>
        </アップロード>
        <ボタン
          タイプ="プライマリ"
          onClick={this.handleUpload}
          無効 = {fileList.length === 0}
          読み込み中={アップロード中}
          スタイル={{ marginTop: 16 }}
        >
          {アップロード中? 'アップロード中' : 'アップロードを開始'}
        </ボタン>
        <Progress style={{ marginTop: 20 }} status={this.state.baifenbi !== 0 ? 'success' : ''} percent={this.state.baifenbi}></Progress>
      </div>
    )
  }
}

デフォルトのアプリをエクスポートします。

バックエンドはExpressを使用してWebサーバーを運ぶ

1.まずwebSeverフォルダを作成します
  cd ウェブサーバー
  npm -init -y //package.jsonファイルを作成する 2. expressとファイルのアップロードに必要なパッケージをインストールする npm install express multer ejs

3. app.jsを作成する

アプリ

var express = require('express');
var app = express();
var パス = require('パス');
var fs = require('fs')
var multer = require('multer')
//クロスドメインアクセスを設定する app.all("*", function (req, res, next) {
    // ドメイン間を移動できるドメイン名を設定します。* は、任意のドメイン名がドメイン間を移動できることを表します。res.header("Access-Control-Allow-Origin", req.headers.origin || '*');
    // // 許可されるヘッダー タイプ res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With");
    // // クロスドメインで許可されるリクエスト メソッドres.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
    // クッキーは許可されています
    res.header("アクセス制御許可資格情報", true);
    if (req.method == 'OPTIONS') {
        res.sendStatus(200);
    } それ以外 {
        次();
    }
})


app.use(express.static(path.join(__dirname, 'public')));
//テンプレート エンジン app.set('views', path.join(__dirname, 'views'));
app.set('ビューエンジン', 'ejs');

app.get("/", (req, res, next) => {
    res.render("インデックス")
})
// ファイルをアップロード app.post('/upload', (req, res, next) => {

    var upload = multer({ dest: 'upload/' }).any();
  
    アップロード(req, res, err => {
      もし(エラー){
        コンソールログ(エラー);
        戻る
      }
      ファイルをreq.files[0]とします
      filname = file.originalname とします
      var oldPath = ファイル.パス
      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("終了", () => {
        ファイルパスをpath.join(process.cwd(), oldPath)とします。
        fs.unlink(ファイルパス、エラー => {
          もし(エラー){
            コンソールログ(エラー);
            戻る
          }
          res.send("ok")
        })
  
      })
      src.on("エラー", err => {
        res.end("エラー")
      })
  
    })
  
  })
  

app.use((req, res) => {
    res.send("404")
})
アプリを聴く(5000)

フロントエンドが起動したら、バックグラウンドノードアプリを起動して

上記は、React がファイルアップロードの進行状況を表示する例の詳細です。React がファイルアップロードの進行状況を表示する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Amap を使用した React 実装例 (react-amap)
  • Reactの仮想DOMとdiffアルゴリズムの詳細な説明
  • React で遅延読み込みを使用して最初の画面の読み込み時間を短縮する方法
  • WeChat公式アカウントでReactプロジェクトを実行する方法
  • ReactでCSSをエレガントに書く方法
  • 最も単純な ErrorBoundary コンポーネントをカプセル化して、React 例外を処理する
  • React Fiber構造の作成手順
  • React の 3 つの主要属性における Ref の使用に関する詳細な説明
  • Reactのようなフレームワークをゼロから作成する
  • React useEffect の理解と使用

<<:  Debian 9 システムに MySQL データベースをインストールする方法

>>:  Linuxで現在のスクリプトの実際のパスを取得する方法

推薦する

JavaScript を使用してセカンダリ メニューを作成する

この記事では、セカンダリメニュー効果を実現するためのJavaScriptの具体的なコードを参考までに...

HTML ul 順序なしテーブルのアプリケーションネスト

順序なしリストのアプリケーションネストコードをコピーコードは次のとおりです。 <!DOCTYP...

Docker で Portainer ビジュアル インターフェースを構築するための詳細な手順

前回述べた問題を解決するために、オンラインで検索したところ、非常に優れたビジュアル インターフェース...

JavaScript の setTimeout() の使用法の概要

目次1. はじめに2. setIntervalとsetTimeoutの違い3.タイムアウトを設定する...

Vue は、デスクトップから Web ページにファイルをドラッグするためのサンプル コードを実装します (画像/オーディオ/ビデオを表示できます)

効果使用する場合は、コードとスタイルを自分で最適化してください。画像を表示しない/ビデオとオーディオ...

Dockerコンテナはルーティングを介して直接通信し、ネットワーク通信を実現します。

概要Docker 自体の現在のデフォルト ネットワークについては、単一ホスト上の異なる Docker...

JavaScript配列の一般的なメソッドの詳細な説明

目次一般的な配列メソッドポップ()シフト解除()シフト()スライス()スプライス()配列から重複した...

JavaScript イベント キャプチャ バブリングとキャプチャの詳細

目次1. イベントの流れ1. コンセプト2. DOMイベントフロー2. イベントの委任1. イベント...

MySQL でタイムスタンプを日付に変換する例

序文職場で次のような状況に遭遇しました。ログ システムのテーブルでは、時間フィールドには日付データで...

Dockerコンテナ間の通信を実装する方法

シナリオ: laradock 開発環境 (php7.3+mysql5.7) がローカルに構築されてい...

Nginx 急ぎ購入 電流制限構成 実装分析

ビジネス上のニーズにより、急ぎの購入が発生することが多いため、ロード バランシング フロント エンド...

docker-maven-pluginはイメージをパッケージ化し、プライベートウェアハウスにアップロードします。

目次1. docker-maven-pluginの紹介2. 環境とソフトウェアの準備3. デモ例3....

フォームの読み取り専用属性と無効な属性についての簡単な説明

フォーム内の読み取り専用および無効な属性1. 読み取り専用:サーバーは、ユーザーがデータを変更するこ...

webpackが静的リソースキャッシュを実装する方法

目次導入複数の異なるハッシュを区別するハッシュチャンクハッシュコンテンツハッシュjs キャッシュの実...

MYSQLパターンマッチングREGEXPの使用に関する一般的な話など

のようにLIKE ではデータ全体が一致する必要がありますが、REGEXP では部分的な一致のみが必要...