Node の http モジュールがファイルのアップロードを処理する方法の簡単な分析
Node.js の http モジュールを使用してファイルのアップロードを処理するにはどうすればよいですか?次の記事では、フロントエンドからアップロードされたファイルをサーバー側で処理する方法について説明しますので、皆様の参考になれば幸いです。
リクエストデータの表示
現在サーバーに送信するデータが次の図のとおりである場合、通常のデータが含まれています。フィールド情報 name
と画像ファイル file
:
まず、サーバー上でファイル アップロード データを受信する方法を見てみましょう。デバッグ コンソールで印刷して表示します。
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 エンコードされた文字列であるため、いくつかの文字列メソッドを使用してデータを処理できます。
ファイル(画像)データの処理
画像データの取得
なぜならできるからです。読み取りストリーム の 'data' イベントは、一度に最大 64 kb のデータを読み取ることができます。画像が比較的大きい場合、複数回トリガーされる可能性があるため、変数 ## を定義します#reqData
リクエストを保存する データ送信: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>let reqData = &#39;&#39;
req.on(&#39;data&#39;, data => {
reqData += data
})
req.on(&#39;end&#39;, () => {
console.log(reqData) // 在这行打断点
res.end(&#39;上传成功&#39;)
})</pre><div class="contentsignin">ログイン後にコピー</div></div>
がトリガーされたとき 'end'
イベントの説明は、リクエスト データが読み取られたことを示します。上記のコードの 6 行目console.log(reqData)
にブレークポイントを作成し、reqData
を確認します。取得されるデータは次のとおりです:
#画像のデータは image/png\r\n\r\n
\r\n---------- である必要があります。 -------------- ----158329774739626517859573--\r\n 真ん中の段落。画像データの開始位置 (
imgDataStartIndex) と終了位置 (
imgDataEndIndex) のインデックスを取得し、
substring() を使用してそれをインターセプトします。最後に
trim() を使用します。メソッドは先頭のスペースを削除します。
\r\n:
const imgType = 'image/png' const imgDataStartIndex = reqData.indexOf(imgType) + imgType.length const imgDataEndIndex = reqData.indexOf(`--${boundary}--`) const imgData = reqData.substring(imgDataStartIndex, imgDataEndIndex).trim()
区切り文字の境界を取得します。--------------------------158329774739626517859573
はクライアントによってランダムに生成された区切り文字で、各データを区切るために使用されます。各フォーム項目の先頭と末尾にあるフォーム (境界)、先頭の前に 2 つのマイナス記号-- が追加され、全体の末尾に 2 つのマイナス記号が追加されます。フォームデータ。マイナス記号。リクエストヘッダーを確認してください:
boundary
content-type で定義されていることがわかります。そのため、次のように使用できます。分離記号を取得するメソッド:
const boundary = req.headers['content-type'].split('boundary=')[1]
Generate image画像データimgData
を取得した後、次を使用できます。fswriteFile() は、イメージを生成するファイルを書き込みます:
fs.writeFile('./img.png', imgData, 'binary', err => { if (!err) console.log('图片写入成功') })
3 番目の部分で
'binary' を渡す必要があることに注意してください。パラメータで エンコーディング を設定します。
概要
コードは次のように要約されます:const http = require('http')
const fs = require('fs')
const server = http.createServer((req, res) => {
req.setEncoding('binary')
const boundary = req.headers['content-type'].split('boundary=')[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('服务器开启'))
ログイン後にコピー
const http = require('http') const fs = require('fs') const server = http.createServer((req, res) => { req.setEncoding('binary') const boundary = req.headers['content-type'].split('boundary=')[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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

「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」バージョンをインストールします。

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