目次
リクエストデータの表示
ファイル(画像)データの処理
--------------------------158329774739626517859573
ホームページ ウェブフロントエンド jsチュートリアル Node の http モジュールがファイルのアップロードを処理する方法の簡単な分析

Node の http モジュールがファイルのアップロードを処理する方法の簡単な分析

Mar 09, 2023 pm 07:37 PM
node httpモジュール

Node.js の http モジュールを使用してファイルのアップロードを処理するにはどうすればよいですか?次の記事では、フロントエンドからアップロードされたファイルをサーバー側で処理する方法について説明しますので、皆様の参考になれば幸いです。

Node の http モジュールがファイルのアップロードを処理する方法の簡単な分析

リクエストデータの表示

現在サーバーに送信するデータが次の図のとおりである場合、通常のデータが含まれています。フィールド情報 name と画像ファイル file:

Node の http モジュールがファイルのアップロードを処理する方法の簡単な分析

まず、サーバー上でファイル アップロード データを受信する方法を見てみましょう。デバッグ コンソールで印刷して表示します。

const http = require('http')
const server = http.createServer((req, res) => {
  req.setEncoding('binary')
  req.on('data', data => {
    console.log(data)
  })
  req.on('end', () => {
    console.log('上传结束')
    res.end('上传成功')
  })
})
server.listen(3010, () => console.log('服务器开启'))
ログイン後にコピー

印刷結果を理解するために、req.setEncoding('binary') を通じて文字エンコーディングを 'binary' に設定します。 # この方法で取得されたデータはバッファ オブジェクトではなく、ASCII エンコードされた文字列であるため、いくつかの文字列メソッドを使用してデータを処理できます。

ただし、ファイル サイズが比較的大きい場合は、コマンド ラインに直接「node」または「nodemon」を入力してコードを実行しても、取得したデータをコンソールに完全に表示することができません。したがって、リクエスト データを出力する場所にブレークポイントを置き、デバッガー モードでコードを実行できます。

Node の http モジュールがファイルのアップロードを処理する方法の簡単な分析

[実行してデバッグ] をクリックした後、vs code が役立ちます。サーバーが実行されています:

Node の http モジュールがファイルのアップロードを処理する方法の簡単な分析

その後、アップロード リクエストを送信するときに、下の図の右上隅にある [シングル ステップ スキップ] をクリックしてリクエストを表示します。データは、英字などASCIIでまとめられる情報はそのまま見ることができますが、画像のデータは文字化けの塊です:

Node の http モジュールがファイルのアップロードを処理する方法の簡単な分析

次のステップは、取得したリクエスト データを処理し、内部の画像データをインターセプトし、ストリームに書き込むことで画像を生成します。

ファイル(画像)データの処理

画像データの取得

なぜなら

できるからです。読み取りストリーム 'data' イベントは、一度に最大 64 kb のデータを読み取ることができます。画像が比較的大きい場合、複数回トリガーされる可能性があるため、変数 ## を定義します#reqData リクエストを保存する データ送信: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>let reqData = &amp;#39;&amp;#39; req.on(&amp;#39;data&amp;#39;, data =&gt; { reqData += data }) req.on(&amp;#39;end&amp;#39;, () =&gt; { console.log(reqData) // 在这行打断点 res.end(&amp;#39;上传成功&amp;#39;) })</pre><div class="contentsignin">ログイン後にコピー</div></div>

req

がトリガーされたとき 'end' イベントの説明は、リクエスト データが読み取られたことを示します。上記のコードの 6 行目console.log(reqData) にブレークポイントを作成し、reqData を確認します。取得されるデータは次のとおりです:

#画像のデータは Node の http モジュールがファイルのアップロードを処理する方法の簡単な分析image/png\r\n\r\n

および

\r\n---------- である必要があります。 -------------- ----158329774739626517859573--\r\n 真ん中の段落。画像データの開始位置 (imgDataStartIndex) と終了位置 (imgDataEndIndex) のインデックスを取得し、substring() を使用してそれをインターセプトします。最後に trim() を使用します。メソッドは先頭のスペースを削除します。\r\n:

const imgType = &#39;image/png&#39;
const imgDataStartIndex = reqData.indexOf(imgType) + imgType.length
const imgDataEndIndex = reqData.indexOf(`--${boundary}--`)
const imgData = reqData.substring(imgDataStartIndex, imgDataEndIndex).trim()
ログイン後にコピー
区切り文字の境界を取得します。

--------------------------158329774739626517859573

はクライアントによってランダムに生成された区切り文字で、各データを区切るために使用されます。各フォーム項目の先頭と末尾にあるフォーム (境界)、先頭の前に 2 つのマイナス記号

-- が追加され、全体の末尾に 2 つのマイナス記号が追加されます。フォームデータ。マイナス記号。リクエストヘッダーを確認してください:

Node の http モジュールがファイルのアップロードを処理する方法の簡単な分析boundary

content-type で定義されていることがわかります。そのため、次のように使用できます。分離記号を取得するメソッド:

const boundary = req.headers[&#39;content-type&#39;].split(&#39;boundary=&#39;)[1]
ログイン後にコピー

Generate image

画像データimgData

を取得した後、次を使用できます。

fswriteFile() は、イメージを生成するファイルを書き込みます:

fs.writeFile(&#39;./img.png&#39;, imgData, &#39;binary&#39;, err => {
  if (!err) console.log(&#39;图片写入成功&#39;)
})
ログイン後にコピー
3 番目の部分で 'binary'

を渡す必要があることに注意してください。パラメータで

エンコーディング を設定します。 概要

コードは次のように要約されます:
const http = require('http')
const fs = require('fs')

const server = http.createServer((req, res) => {
  req.setEncoding('binary')
  const boundary = req.headers[&#39;content-type&#39;].split(&#39;boundary=&#39;)[1]
  let reqData = ''
  req.on('data', data => {
    reqData += data
  })
  req.on('end', () => {
    const imgType = 'image/png'
    const imgDataStartIndex = reqData.indexOf(imgType) + imgType.length
    const imgDataEndIndex = reqData.indexOf(`--${boundary}--`)
    const imgData = reqData.substring(imgDataStartIndex, imgDataEndIndex).trim()
    fs.writeFile('./img.png', imgData, 'binary', err => {
      if (!err) console.log('图片写入成功')
    })
    res.end('上传成功')
  })
})

server.listen(3010, () => console.log('服务器开启'))
ログイン後にコピー

上述代码能够成功运行还有一些限制,比如只能处理单文件上传,且文件需要是 png 格式的图片,并且放在表单最后一项。文章的目的在于简单了解使用 node 的 http 模块搭建的服务器大体上是如何处理上传文件的请求的,为将来深入学习其它基于 http 模块的框架(express.js、koa.js 等)打好基础。

更多node相关知识,请访问:nodejs 教程

以上がNode の http モジュールがファイルのアップロードを処理する方法の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

nvmでノードを削除する方法 nvmでノードを削除する方法 Dec 29, 2022 am 10:07 AM

nvm でノードを削除する方法: 1. 「nvm-setup.zip」をダウンロードして C ドライブにインストールします; 2. 「nvm -v」コマンドで環境変数を構成し、バージョン番号を確認します; 3. 「nvm」を使用しますinstall" コマンド ノードのインストール; 4. "nvm uninstall" コマンドでインストールしたノードを削除します。

Express を使用してノード プロジェクトでファイルのアップロードを処理する方法 Express を使用してノード プロジェクトでファイルのアップロードを処理する方法 Mar 28, 2023 pm 07:28 PM

ファイルのアップロードをどのように処理するか?次の記事では、Express を使用してノード プロジェクトでファイルのアップロードを処理する方法を紹介します。

NodeサービスのDockerミラーリングを行うにはどうすればよいですか?極限最適化の詳しい説明 NodeサービスのDockerミラーリングを行うにはどうすればよいですか?極限最適化の詳しい説明 Oct 19, 2022 pm 07:38 PM

この期間中、私は Tencent ドキュメントのすべてのカテゴリに共通する HTML 動的サービスを開発していましたが、さまざまなカテゴリへのアクセスの生成と展開を容易にし、クラウド移行のトレンドに従うために、Docker を使用して修正することを検討しました。サービス内容や製品バージョンを一元管理します。この記事では、私が Docker を提供するプロセスで蓄積した最適化の経験を参考として共有します。

Nodeのプロセス管理ツール「pm2」を徹底分析 Nodeのプロセス管理ツール「pm2」を徹底分析 Apr 03, 2023 pm 06:02 PM

この記事では、Node のプロセス管理ツール「pm2」について説明し、pm2 が必要な理由、pm2 のインストール方法と使用方法について説明します。皆様のお役に立てれば幸いです。

PIノードティーチング:PIノードとは何ですか? PIノードをインストールしてセットアップする方法は? PIノードティーチング:PIノードとは何ですか? PIノードをインストールしてセットアップする方法は? Mar 05, 2025 pm 05:57 PM

ピン張りのノードの詳細な説明とインストールガイドこの記事では、ピネットワークのエコシステムを詳細に紹介します - PIノードは、ピン系生態系における重要な役割であり、設置と構成の完全な手順を提供します。 Pinetworkブロックチェーンテストネットワークの発売後、PIノードは多くの先駆者の重要な部分になり、テストに積極的に参加し、今後のメインネットワークリリースの準備をしています。まだピン張りのものがわからない場合は、ピコインとは何かを参照してください。リストの価格はいくらですか? PIの使用、マイニング、セキュリティ分析。パインワークとは何ですか?ピン競技プロジェクトは2019年に開始され、独占的な暗号通貨PIコインを所有しています。このプロジェクトは、誰もが参加できるものを作成することを目指しています

pkg を使用して Node.js プロジェクトを実行可能ファイルにパッケージ化する方法について説明します。 pkg を使用して Node.js プロジェクトを実行可能ファイルにパッケージ化する方法について説明します。 Dec 02, 2022 pm 09:06 PM

Nodejs実行可能ファイルをpkgでパッケージ化するにはどうすればよいですか?次の記事では、pkg を使用して Node プロジェクトを実行可能ファイルにパッケージ化する方法を紹介します。

npm ノード gyp が失敗した場合の対処方法 npm ノード gyp が失敗した場合の対処方法 Dec 29, 2022 pm 02:42 PM

「node-gyp.js」が「Node.js」のバージョンと一致しないため、npm node gyp が失敗します。解決策は次のとおりです: 1. 「npm cache clean -f」を使用してノード キャッシュをクリアします; 2. 「npm install -」を使用します。 g n" n モジュールをインストールします。 3. 「n v12.21.0」コマンドを使用して、「node v12.21.0」バージョンをインストールします。

Angular と Node を使用したトークンベースの認証 Angular と Node を使用したトークンベースの認証 Sep 01, 2023 pm 02:01 PM

認証は、Web アプリケーションの最も重要な部分の 1 つです。このチュートリアルでは、トークンベースの認証システムと、それが従来のログイン システムとどのように異なるかについて説明します。このチュートリアルを終えると、Angular と Node.js で書かれた完全に動作するデモが表示されます。従来の認証システム トークンベースの認証システムに進む前に、従来の認証システムを見てみましょう。ユーザーはログイン フォームにユーザー名とパスワードを入力し、[ログイン] をクリックします。リクエストを行った後、データベースにクエリを実行してバックエンドでユーザーを認証します。リクエストが有効な場合、データベースから取得したユーザー情報を使用してセッションが作成され、セッション情報が応答ヘッダーで返され、セッション ID がブラウザに保存されます。対象となるアプリケーションへのアクセスを提供します。

See all articles