メインコンテンツへスキップ

バックエンド: @blocklet/uploader-server

@blocklet/uploader-server パッケージは、ブロックレットのバックエンドで様々なファイル処理タスクを扱うために設計された Express.js ミドルウェアのスイートを提供します。これは、@blocklet/uploader フロントエンドコンポーネントのサーバーサイド対応部分

@blocklet/uploader-server パッケージは、ブロックレットのバックエンドで様々なファイル処理タスクを扱うために設計された Express.js ミドルウェアのスイートを提供します。これは、@blocklet/uploader フロントエンドコンポーネントのサーバーサイド対応部分として機能し、ダイレクトファイルアップロード、リモートソースとの統合、リソース提供などの機能を有効にします。

フロントエンドのパートナーとシームレスに連携するように設計されていますが、カスタマイズされたファイルアップロードロジックのスタンドアロンソリューションとしても使用できます。このパッケージは、Express アプリケーションに簡単に統合できるいくつかのモジュラーミドルウェアイニシャライザをエクスポートします。

コアミドルウェアの相互作用

以下の図は、アップロードプロセス中に主要なミドルウェアコンポーネントがフロントエンドおよび外部サービスとどのように相互作用するかを示しています。

インストール

開始するには、パッケージをブロックレットの依存関係に追加します。

Installation

bash
pnpm add @blocklet/uploader-server

一般的な使用法

これは、アップロードおよびコンパニオンミドルウェアをExpressアプリケーションのルーターに統合する典型的な例です。必要なミドルウェアを初期化し、そのハンドラーを特定のルートにマウントできます。

Express Router Example

javascript
import { initLocalStorageServer, initCompanion } from '@blocklet/uploader-server';
import express from 'express';

// `env`、`user`、`auth`、`ensureComponentDid`、および `Upload` モデルは他の場所で定義されていると仮定します
const router = express.Router();

// 1. 直接アップロードのためにローカルストレージサーバーを初期化します
const localStorageServer = initLocalStorageServer({
  path: env.uploadDir, // アップロードを保存するディレクトリ
  express,
  // オプション:ファイルが正常にアップロードされた後に実行されるコールバック
  onUploadFinish: async (req, res, uploadMetadata) => {
    const {
      id: filename,
      size,
      metadata: { filename: originalname, filetype: mimetype },
    } = uploadMetadata;

    // アップロードされたファイルの公開URLを構築します
    const obj = new URL(env.appUrl);
    obj.protocol = req.get('x-forwarded-proto') || req.protocol;
    obj.pathname = `/uploads/${filename}`;

    // ファイルのメタデータをデータベースに保存します
    const doc = await Upload.insert({
      mimetype,
      originalname,
      filename,
      size,
      // ... リクエストからの他のメタデータ
    });

    // フロントエンドにJSONレスポンスを返します
    const resData = { url: obj.href, ...doc };
    return resData;
  },
});

// アップロードハンドラーを特定のルートにマウントします
router.use('/uploads', user, auth, ensureComponentDid, localStorageServer.handle);

// 2. リモートソース(例:URL、Unsplash)のためにCompanionを初期化します
const companion = initCompanion({
  path: env.uploadDir,
  express,
  providerOptions: env.providerOptions, // プロバイダーキー(例:Unsplash)
  uploadUrls: [env.appUrl], // アプリのURL
});

// コンパニオンハンドラーをそのルートにマウントします
router.use('/companion', user, auth, ensureComponentDid, companion.handle);

利用可能なミドルウェア

このパッケージは、さまざまな機能のためにいくつかのミドルウェアイニシャライザをエクスポートします。カードをクリックして、詳細なAPIリファレンスと設定オプションを表示します。

次のステップ

@blocklet/uploader-server パッケージは、ブロックレット内で堅牢なファイル処理システムを構築するための不可欠なサーバーサイドのビルディングブロックを提供します。これらのミドルウェア機能を組み合わせることで、ユーザーに機能豊富なアップロード体験を提供できます。

開始するには、initLocalStorageServer のドキュメントを参照して、コアとなる直接アップロード機能を設定することをお勧めします。