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

ファイルのアップロードと動的画像処理をオンザフライで行うための Express Web アプリの構築

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-12 01:15:02788ブラウズ

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 までご連絡ください。