Axios は、ブラウザと node.js で使用できる promise ベースの HTTP ライブラリです。 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 の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Debian 9 システムに MySQL データベースをインストールする方法
>>: Linuxで現在のスクリプトの実際のパスを取得する方法
この記事では、セカンダリメニュー効果を実現するためのJavaScriptの具体的なコードを参考までに...
順序なしリストのアプリケーションネストコードをコピーコードは次のとおりです。 <!DOCTYP...
前回述べた問題を解決するために、オンラインで検索したところ、非常に優れたビジュアル インターフェース...
目次1. はじめに2. setIntervalとsetTimeoutの違い3.タイムアウトを設定する...
効果使用する場合は、コードとスタイルを自分で最適化してください。画像を表示しない/ビデオとオーディオ...
概要Docker 自体の現在のデフォルト ネットワークについては、単一ホスト上の異なる Docker...
目次一般的な配列メソッドポップ()シフト解除()シフト()スライス()スプライス()配列から重複した...
目次1. イベントの流れ1. コンセプト2. DOMイベントフロー2. イベントの委任1. イベント...
序文職場で次のような状況に遭遇しました。ログ システムのテーブルでは、時間フィールドには日付データで...
シナリオ: laradock 開発環境 (php7.3+mysql5.7) がローカルに構築されてい...
ビジネス上のニーズにより、急ぎの購入が発生することが多いため、ロード バランシング フロント エンド...
目次1. docker-maven-pluginの紹介2. 環境とソフトウェアの準備3. デモ例3....
フォーム内の読み取り専用および無効な属性1. 読み取り専用:サーバーは、ユーザーがデータを変更するこ...
目次導入複数の異なるハッシュを区別するハッシュチャンクハッシュコンテンツハッシュjs キャッシュの実...
のようにLIKE ではデータ全体が一致する必要がありますが、REGEXP では部分的な一致のみが必要...