この記事では、サーバーとして express を使用し、 express-fileupload ライブラリが提供するミドルウェア機能を使用して、クライアントから画像を受け取り、サーバー上にファイルとして保存します。クライアントは、create-react-app フレームワーク、bootstrap UI、axios を使用して http リクエストを送信し、進行状況バーの現在の進行状況値を提供します。アップロードが成功すると、サーバー上の場所に応じて画像が表示されます。 プロジェクトを初期化するmkdir react-file-upload // プロジェクトのルートディレクトリを作成する cd react-file-upload npm init -y // npm を初期化し、package.json を作成します 必要な依存関係をインストールする npm i express express-fileupload npm i -D nodemon parallelly // クライアントとサーバーを並行して実行できます (ローカルマシンでテスト) react-file-upload/package.jsonのスクリプトを変更する { "メイン": "server.js", 「スクリプト」: { "開始": "ノードサーバー.js", "サーバー": "nodemon server.js", "クライアント": "npm start --prefix クライアント", "dev": " 同時に \"npm run server\" \"npm run client\" " } }
サーバーの作成server.jsファイルを書きましょう 定数 express = require('express'); const fileUpload = require('express-fileupload'); express() は、定数です。 // express-fileupload ミドルウェアを使用する app.use( fileUpload() ); // /upload ページから送信された投稿リクエストを処理する app.post('/upload', (req, res) => { // req の files プロパティは express-fileupload ミドルウェアによって追加されます!? (質問は一時的に保存されています) // ファイル属性が存在するかどうかを確認し、ファイルが存在する場合は 400 を返します。存在しない場合は 400 を返します。 (req.files === null)の場合{ res.status(400).json({msg:'ファイルがアップロードされていません'});を返します。 } // それ以外の場合はファイルを取得します // ファイルは次のテキストの formData.append('file', file) の最初のパラメータによって定義され、他の名前にカスタマイズできます const file = req.files.file; // ファイルを最初のパラメータで指定された場所に移動します。エラーが発生した場合は 500 を返します。 file.mv(`${__dirname}/client/public/uploads/${file.name}`, err => { もしエラーが起きたら コンソールエラー(err); res.status(500).send(err) を返します。 } // エラーがない場合はjsonを返す // アップロード後、サーバー上のファイルのパスに従ってアップロードされたファイルを表示する予定です // 次に、これを react コンポーネントに実装します // アップロードされたファイルを保存するために、クライアントの public フォルダーの下に uploads フォルダーを作成します res.json({fileName: file.name, filePath: `uploads/${file.name}`}); }); }); app.listen(5000,() => {console.log('サーバーが起動しました...')}); ここで、server.js を再度実行して、エラーがないことを確認します。コンソールにサーバーが起動したことが表示されます... npm 実行サーバー クライアントを初期化する次にクライアントを作成し、create-react-app scaffoldingを使用してプロジェクトを初期化します。 npx create-react-app クライアント 初期化が完了したら、不要なファイルを選択的に削除することができます。
src/index.jsファイルに導入されたindex.cssを削除し、publicフォルダ内のindex.htmlテンプレートファイルにbootstrap cssとjsを直接導入します。 <!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="utf-8" /> <link rel="ショートカットアイコン" href="%PUBLIC_URL%/favicon.ico" rel="外部 nofollow" /> <meta name="viewport" content="width=デバイス幅、初期スケール=1" /> <meta name="テーマカラー" content="#000000" /> <!-- CSS をインポート --> <link rel="スタイルシート" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="外部 nofollow" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="匿名"> <link rel="manifest" href="%PUBLIC_URL%/manifest.json" rel="外部 nofollow" /> <title>React ファイルアップローダー</title> </head> <本文> <noscript>このアプリを実行するには、JavaScript を有効にする必要があります。</noscript> <div id="ルート"></div> <!-- js をインポート --> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" クロスオリジン="匿名"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> </本文> </html> コンポーネントの記述合計3つのコンポーネントを書く必要があります。
ファイルアップロードReact をインポートし、{useState} を 'react' から取得します。 'axios' から axios をインポートします './Message' からメッセージをインポートします './Progress' から Progress をインポートします 定数FileUpload = () => { 戻る ( <div> {メッセージ ? <メッセージ msg={message} />: null} <フォームonSubmit={onSubmit}> <div className="カスタムファイル mb-4"> <input type="file" className="custom-file-input" id="customFile" onChange={onChange}></input> <label className="custom-file-label" htmlFor="customFile">{ファイル名}</label> </div> <進捗率={uploadedPercentage}></進捗> <input className="btn btn-primary btn-block mt-4" type="submit" value="アップロード"></input> </フォーム> { アップロードされたファイル? <div className="行 mt-5"> <div className="col-md-6 m-auto"> <h3 className="text-center">{アップロードされたファイル名}</h3> <img style={{width:'100%'}} src={uploadedFile.filePath} alt=""></img> </div> </div> : <p>まだ何もアップロードされていません...</p> } </div> ) } デフォルトのFileUploadをエクスポート メッセージ.js'react' から React をインポートします 'prop-types' から PropTypes をインポートします 定数メッセージ = ({msg}) => { console.log('彼女') 戻る ( <div className="アラート アラート情報 アラート非表示 フェード表示" role="アラート"> {メッセージ} <button type="button" className="close" data-dismiss="alert" aria-label="閉じる"> <span aria-hidden="true">×</span> </ボタン> </div> ) } メッセージ.propTypes = { メッセージ: PropTypes.string.isRequired、 } デフォルトメッセージをエクスポート 進捗状況'react' から React をインポートします 'prop-types' から PropTypes をインポートします const Progress = ({パーセンテージ}) => { 戻る ( <div className="進捗状況"> <div className="プログレスバー" role="プログレスバー" スタイル={{ 幅: `${パーセント}%` }} aria-valuenow={パーセンテージ} aria-valuemin="0" aria-valuemax="100">{パーセンテージ}%</div> </div> ) } Progress.propTypes = { パーセンテージ: PropTypes.number.isRequired、 } デフォルトのエクスポートの進行状況 テストこれまでに、すべての機能コンポーネントが完成しました。 npm 実行 dev 最後に、gitアドレスを添付します。Git これで、node.js の express-fileupload ミドルウェアを使用してファイルをアップロードする方法についての説明は終わりです。node.js のファイルアップロードに関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Linuxの簡単な分析でファイアウォールの状態と外部に開いているポートの状態を確認する
この記事では、例を使用して、MySQL ストアド プロシージャでのループ ステートメント (WHIL...
序文gdb は Linux で非常に便利なデバッグ ツールです。コマンドライン モードのデバッグ ツ...
最近、個人の Web サイトに非常にシンプルなカラー スキーム (テーマ) スイッチャーを追加しまし...
この記事では、Vueの自己ネストツリーコンポーネントの使い方を参考までに紹介します。具体的な内容は次...
データは貴重なものであることは誰もが知っています。データをバックアップしなければ、データをそのまま放...
目次導入準備するシステムイメージをダウンロードHyper-Vを有効にする新しい仮想ネットワークスイッ...
目次1. サーバーの状態を確認します。 2. ルートパスワードを変更します。 3. mysqlser...
今日は、すべてのブラウザ (主に IE 9 以上と Chrome) と互換性のある自分のホームページ...
目次1. PXCの紹介1.1 PXC の紹介1.2 PXC の特徴と利点1.3 PXCの限界と欠点1...
質問ガイド1. Hadoop 3.x はどのようにして障害を許容するのでしょうか? 2. Hadoo...
目次序文インストール導入環境の切り替え傍受を要求するレスポンスインターセプションAPIの統合管理要約...
説明するこの記事では、Vue テクノロジーに基づいて再帰コンポーネントを実装する方法を紹介します。 ...
目次概要Big O 表記法とは何ですか?オー(1)の上) (n^2) O(logn) ですの上!)結...
最近、ストアド プロシージャの名前を変更する機能を使用しました。インターネットで情報を検索しましたが...
[LeetCode] 175.2つのテーブルを結合する表: 人物+-------------+--...