検索
ホームページウェブフロントエンドjsチュートリアルファイルのアップロードと動的画像処理をオンザフライで行うための Express Web アプリの構築

Building an Express web App for File Uploads and Dynamic Image Processing on the fly

ガイド: ファイルのアップロードと動的画像処理のための Express Web アプリの構築

このチュートリアルでは、ファイルのアップロードを処理し、SharpExpress.js を使用してサーバーを構築する方法を示します。 🎜>.

前提条件

始める前に、

Node.jsnpm がインストールされていることを確認してください。このチュートリアルでは次のライブラリを使用します:

  1. Express.js - サーバーのセットアップ用。
  2. Multer - ファイルのアップロードを処理します。
  3. シャープ - 画像処理用。
  4. CORS - クロスオリジンリクエストを許可します。

ステップ 1: プロジェクトのセットアップ

プロジェクト用に新しいディレクトリを作成することから始めます:


mkdir image-upload-server
cd image-upload-server
npm init -y
これにより、新しいプロジェクト フォルダーが作成され、package.json ファイルが初期化されます。

次のコマンドを実行すると、すべての依存関係をインストールできます。


npm install express multer sharp cors 
必要なディレクトリを作成します

次の 2 つのディレクトリが必要になります:

    アップロードされた元の画像を保存するoriginal-image。
  • 処理された画像を保存するtransform-image。
次のコマンドを実行して、これらのディレクトリを作成します。


mkdir original-image transform-image

ステップ 2: Express サーバーをセットアップする

次に、

Express.js を使用して基本的なサーバーをセットアップしましょう。プロジェクトのルートにindex.jsというファイルを作成し、次のコードを追加してサーバーを設定します:

const express = require('express');
const cors = require('cors');
const multer = require('multer');
const path = require('path');
const sharp = require('sharp');
const fs = require('fs');

const app = express();

// Middleware for CORS and JSON parsing
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
この基本セットアップには以下が含まれます:

  • CORS: クロスオリジンリクエストを許可します。
  • express.json() および express.urlencoded() は、受信リクエスト データを解析します。

ステップ 3: ファイルアップロード用に Multer を設定する

ファイルのアップロードを処理するには、

Multer を使用します。 Multer を使用すると、アップロードされたファイルを指定したディレクトリに保存できます。

次のコードを追加して

Multer を構成します:

// Configure multer for file storage
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'original-image'); // Ensure the 'original-image' directory exists
  },
  filename: function (req, file, cb) {
    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
    cb(null, file.fieldname + '-' + uniqueSuffix + path.extname(file.originalname));
  }
});

const upload = multer({ storage: storage });
この設定により、次のことが保証されます:

    アップロードされたファイルは、オリジナル画像フォルダーに保存されます。
  • 各ファイルには、現在のタイムスタンプと乱数に基づいて一意の名前が付けられます。

ステップ 4: ファイル アップロード エンドポイントを作成する

次に、ファイルアップロード用の

POST エンドポイントを作成します。ユーザーはファイルをサーバーに送信し、サーバーはそのファイルをオリジナル画像ディレクトリに保存します。

ファイルのアップロードを処理するために次のコードを追加します:


// File upload endpoint
app.post('/upload', upload.single('file'), (req, res) => {
  const file = req.file;
  if (!file) {
    return res.status(400).send({ message: 'Please select a file.' });
  }
  const url = `http://localhost:3000/${file.filename}`;

  // Store file path with original filename as the key
  db.set(file.filename, file.path);

  res.json({
    message: 'File uploaded successfully.',
    url: url
  });
});
このエンドポイントは次のことを行います:

  • 単一ファイルのアップロードを受信します (フィールド名ファイル付き)。
  • アップロードされたファイルの URL を返します。

ステップ 5: アップロードされたファイルを提供する

次に、アップロードされたファイルを提供するための GET エンドポイントを作成しましょう。クエリ パラメーター (サイズ変更、形式変換など) が指定されている場合、サーバーはそれに応じて画像を処理します。

アップロードされたファイルを提供するには、次のコードを追加します:

mkdir image-upload-server
cd image-upload-server
npm init -y

このエンドポイント:

  • ファイル名に基づいて DB マップからファイルを取得します。
  • サイズ変更、形式変換、または品質調整が指定されている場合、画像を処理します。
  • パフォーマンスを向上させるために、処理された画像をキャッシュします。

ステップ 6: Sharp で画像を処理する

Sharp ライブラリを使用すると、サイズ変更、形式変換、品質調整など、画像に対してさまざまな変換を実行できます。

これらの変換を処理する processImage 関数を追加します。

npm install express multer sharp cors 

この機能:

  • h (高さ) パラメータと w (幅) パラメータに基づいて画像のサイズを変更します。
  • f パラメータに基づいて画像形式を変換します (JPEG、PNG、WebP など)。
  • q パラメーター (オプション) に基づいて画質を調整します。
  • 処理された画像をtransform-imageフォルダーに保存します。

ステップ 7: サーバーを起動する

最後に、次のコードを追加してサーバーを起動します:

mkdir original-image transform-image

これにより、ポート 3000 でサーバーが起動します。


ステップ 8: サーバーのテスト

1. Postman を使用したファイルのアップロードのテスト

Postman を使用してファイル アップロード機能をテストするには、次の手順に従います。

1.1 オープンポストマン

コンピュータでPostmanを起動します。 Postman がインストールされていない場合は、ここからダウンロードできます。

1.2 POSTリクエストの作成

  • リクエストのタイプを POST に設定します。
  • URL フィールドに、http://localhost:3000/upload.
  • と入力します。

1.3 本体にファイルを追加する

  • ボディ タブを選択します。
  • フォームデータ オプションを選択します。
  • フォームで、キーを file に設定します (これは multer 設定のフィールド名と一致する必要があります)。
  • ファイルの選択 ボタンをクリックし、コンピューターから画像ファイルを選択します。

1.4 リクエストの送信

  • 送信をクリックします。
  • アップロードが成功すると、アップロードされた画像の URL を含む応答を受け取るはずです。

応答例:

mkdir image-upload-server
cd image-upload-server
npm init -y

2. ブラウザを介した画像の取得と処理のテスト

次に、ブラウザを使用して、変換を含む画像の取得をテストしてみましょう。

2.1 アップロードされた画像を取得する

画像を取得するには、ブラウザを開いて、ファイルのアップロード後に受け取った URL に移動するだけです。たとえば、応答 URL が次の場合:

npm install express multer sharp cors 

ブラウザのアドレスバーにこの URL を入力し、Enter を押してください。元の画像が表示されるはずです。


3. クエリパラメータを使用した画像変換のテスト

次に、サイズ変更、形式変換、品質調整のためのクエリ パラメーターを追加して、動的な画像変換をテストしてみましょう。

3.1 変換用のクエリパラメータの追加

ブラウザで、画像 URL にクエリ パラメータを追加して、変換をテストします。以下にいくつかの例を示します:

  • 画像のサイズを幅 200 ピクセル、高さ 300 ピクセルに変更します:
mkdir original-image transform-image
  • 画像を PNG 形式に変換します:
const express = require('express');
const cors = require('cors');
const multer = require('multer');
const path = require('path');
const sharp = require('sharp');
const fs = require('fs');

const app = express();

// Middleware for CORS and JSON parsing
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
  • 画像を 90% の品質で WebP 形式に変換します:
// Configure multer for file storage
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'original-image'); // Ensure the 'original-image' directory exists
  },
  filename: function (req, file, cb) {
    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
    cb(null, file.fieldname + '-' + uniqueSuffix + path.extname(file.originalname));
  }
});

const upload = multer({ storage: storage });
  • 画像のサイズを幅 400 ピクセル、高さ 500 ピクセルに変更し、80% の品質で JPEG に変換します:
// File upload endpoint
app.post('/upload', upload.single('file'), (req, res) => {
  const file = req.file;
  if (!file) {
    return res.status(400).send({ message: 'Please select a file.' });
  }
  const url = `http://localhost:3000/${file.filename}`;

  // Store file path with original filename as the key
  db.set(file.filename, file.path);

  res.json({
    message: 'File uploaded successfully.',
    url: url
  });
});

3.2 予期される動作

  • クエリ パラメータを使用していずれかの URL にアクセスすると、サーバーはそれに応じて画像を処理します。
    • 画像が以前に同じパラメータで処理されている場合は、キャッシュされたバージョンが提供されます。
    • 画像がまだ処理されていない場合は、画像が処理され (サイズ変更、形式の変換、品質の調整)、今後のリクエストに備えて、transform-image フォルダーに保存されます。

ブラウザに処理された画像が表示され、変換が正しく適用されたかどうかを確認できます。


ワークフロー例

  1. Postman 経由で画像をアップロードします
  2. Postman から提供された URL を使用して、ブラウザでアップロードされた画像を取得します
  3. ブラウザで URL を変更します。サイズ変更の動作を確認するには ?h=300&w=200 などのクエリ パラメータを追加し、形式変換には ?f=webp&q=90 を追加します。

結論

この画像アップロードおよび処理サーバーは、画像のアップロード、変換、取得を処理するための堅牢なソリューションを提供します。ファイル処理には Multer、画像処理には Sharp を使用し、クエリ パラメーターによるサイズ変更、形式変換、品質調整をサポートします。このシステムは処理された画像を効率的にキャッシュしてパフォーマンスを最適化し、高速かつ応答性の高い画像配信を保証します。このアプローチにより、動的な画像変換を必要とするアプリケーションの画像管理が簡素化され、開発者にとって多用途なツールになります。

以上がファイルのアップロードと動的画像処理をオンザフライで行うための Express Web アプリの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
舞台裏:JavaScriptをパワーする言語は何ですか?舞台裏:JavaScriptをパワーする言語は何ですか?Apr 28, 2025 am 12:01 AM

JavaScriptはブラウザとnode.js環境で実行され、JavaScriptエンジンに依存してコードを解析および実行します。 1)解析段階で抽象的構文ツリー(AST)を生成します。 2)ASTをコンパイル段階のバイトコードまたはマシンコードに変換します。 3)実行段階でコンパイルされたコードを実行します。

PythonとJavaScriptの未来:傾向と予測PythonとJavaScriptの未来:傾向と予測Apr 27, 2025 am 12:21 AM

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

Python vs. JavaScript:開発環境とツールPython vs. JavaScript:開発環境とツールApr 26, 2025 am 12:09 AM

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。