ファイルのアップロードの進行状況を示す 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で現在のスクリプトの実際のパスを取得する方法

推薦する

jQueryは時間セレクタを実装する

この記事の例では、参考までに時間セレクターを実装するためのjQueryの具体的なコードを共有していま...

uni-appがNFC読み取り機能を実装

この記事では、参考までに、NFC読み取り機能を実装するためのuni-appの具体的なコードを紹介しま...

MySQL における悲観的ロックと楽観的ロック

リレーショナル データベースでは、悲観的ロックと楽観的ロックがリソース同時実行シナリオのソリューショ...

Linux で fdisk を使用してディスクをパーティション分割する方法

Linux パーティションでよく使用されるコマンド: fdisk、MBR パーティション テーブルの...

CSS3 疑似クラスセレクターの簡単なレビュー

序文CSS がフロントエンド開発の基本的なスキルであるならば、「セレクター」は基礎中の基礎です。これ...

VUE + OPENLAYERSがリアルタイムポジショニング機能を実現

目次序文1. ラベルスタイルを定義する2. GeoJSONデータのシミュレーション3. Vercto...

VueはExcelデータをエクスポートするパブリック関数メソッドをカプセル化します

vue+element UI は Excel データをエクスポートするためのパブリック関数をカプセル...

Centos7 環境でバイナリ インストール パッケージから mysql5.6 をインストールする方法の詳細な説明

この記事では、centos7 環境でバイナリ インストール パッケージを使用して mysql5.6 ...

CSS での三角形の描画と巧妙な応用例の詳細な説明

鉛Web ページ上の一般的な三角形の一部は、画像やフォント アイコンにする必要なく、CSS を使用し...

MySQL データベース内の数十億のデータを素早くクリーンアップする方法

今日、ディスクアラーム例外を受け取りました。50G ディスクが爆発しました。分析と解決のプロセスは次...

MySQL レプリケーション テーブルの詳細とサンプル コード

MySQL レプリケーション テーブルの詳細な説明テーブル構造、インデックス、デフォルト値などを含む...

JavaScriptでよく使われる配列重複排除実戦ソースコード

アレイの重複排除は、通常、就職面接中に遭遇し、アレイの重複排除方法のコードを手動で記述することが求め...

favico.ico---ウェブサイトicoアイコン設定手順

1. 正常に生成されたアイコン ファイルをダウンロードし、名前を favico.ico に変更して、...

aタグのhref属性とonclickイベントの比較

まず、href 属性と onclick イベントの実行順序について説明します。マウスが a タグをク...

IE6 スペースバグ修正方法

コードを見てみましょう:コードをコピーコードは次のとおりです。 < !DOCTYPE html...