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

推薦する

nginx の 2 つのモジュールの proxy_pass の違い

1. 1.ngx_stream_proxy_moduleモジュールのproxy_passディレクティ...

Vue は Tencent TIM インスタント メッセージングを統合します

この記事では主に、Tencent TIM インスタント メッセージングを Vue と統合する方法を紹...

CSS変数var()の使い方を理解する必要があります

Web プロジェクトがどんどん大きくなると、CSS は天文学的な大きさと複雑さを増します。この問題を...

MySQL ストアド プロシージャのエラー処理例の詳細な説明

この記事では、例を使用して MySQL ストアド プロシージャのエラー処理について説明します。ご参考...

MySQL ソート機能の詳細

目次1. 問題のシナリオ2. 原因分析3. 解決策4. 知識を広げる4.1 クエリの最適化を制限する...

Windows (x86、64 ビット) で MySQL 5.7.17 無料インストール バージョンをアップグレードするための詳細なチュートリアル

Laravel 5.4 のデフォルトの utf8mb64 文字エンコーディングをサポートするには、M...

jQueryはクッキーを操作する

コードをコピーコードは次のとおりです。 jQuery.cookie = 関数(名前、値、オプション)...

CSS3 のメディアクエリと rem レイアウトを組み合わせてモバイル画面に適応

CSS3 構文: (750 ピクセルのデザインの場合、1rem = 100 ピクセル) @media...

docker で zabbix_agent をデプロイする方法

zabbix_agent のデプロイメント:推奨事項: zabbix_agent は docker-...

SQL 文における複合主キーと結合主キーに関する予備的研究

1. 複合主キーいわゆる複合主キーとは、テーブルの主キーが複数のフィールドで構成され、ビジネス上の意...

Linuxで大きなファイルを素早くコピーする方法

データをコピーリモートでデータをコピーする場合、通常は rsync コマンドを使用しますが、小さなフ...

Linux での MySQL 5.6.33 のインストールと設定のチュートリアル

このチュートリアルでは、LinuxでのMySQL 5.6.33のインストールと設定方法を参考までに紹...

MySQL 5.7 でパスワードを変更するときに発生する ERROR 1054 (42S22) の解決方法

MySQL 5.7 を新しくインストールしました。ログインすると、パスワードが間違っているというメッ...

node.js チュートリアルの Util モジュールの例の詳細な説明

目次タイプ判定から始める厳格な平等エラーファーストと約束デバッグと出力タイプ判定から始めるJavaS...