跳到主要內容

initCompanion(options)

initCompanion 函數初始化並設定 Uppy Companion 中介軟體,這對於讓使用者能夠從遠端來源(如 Unsplash、Google Drive、Instagram 或直接的 URL)匯入檔案至關重要。此函數是官方 @uppy/companion 函式庫的封裝,專為在 blocklet 環境中無縫整合而設計。

關於如何設定的實用指南,請參閱 整合遠端來源 (Companion)

運作原理

Companion 作為伺服器端的代理。當使用者從遠端來源選取檔案時,請求會被傳送到您後端的 Companion 端點。接著,您的伺服器會從遠端來源獲取檔案,並將其串流回使用者的瀏覽器。一旦檔案進入瀏覽器,它就會被視為本地檔案,並上傳到您的最終目的地(例如,由 initLocalStorageServer 處理的端點)。

使用方法

要使用 Companion,請用您的設定選項來初始化它,然後將其 handle 附加到一個 Express 路由路徑上。前端的 Uploader 元件必須為其 companionUrl 屬性設定相同的路徑。

Companion 基本設定

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

const router = express.Router();

// Companion 的基本設定
const companion = initCompanion({
  // 伺服器上用於處理檔案的暫存目錄
  path: '/tmp/uploads',
  express,
  // 包含必要金鑰和密鑰的提供者選項
  providerOptions: {
    unsplash: {
      key: process.env.UNSPLASH_KEY,
      secret: process.env.UNSPLASH_SECRET,
    },
  },
  // 您的 blocklet 的公開 URL,某些提供者需要此項
  uploadUrls: [process.env.APP_URL],
});

// 將 companion 中介軟體掛載到特定路徑
// 此路徑應與前端的 companionUrl 屬性相符
router.use('/companion', companion.handle);

參數

initCompanion 函數接受一個包含以下屬性的選項物件:

名稱類型描述
pathstring必填。 伺服器上用於在處理過程中儲存檔案的暫存目錄的絕對路徑。這對應於 Uppy Companion 中的 filePath 選項。
expressFunction必填。 Express 應用程式實例。用於為 Companion 建立必要的子應用程式和中介軟體堆疊。
providerOptionsobject可選。一個物件,包含您想啟用的每個遠端提供者的設定。每個鍵是提供者名稱(例如 unsplash),值是其設定,如 API 金鑰和密鑰。
...restPropsany任何其他來自官方 Uppy Companion 選項 的有效選項都可以在此傳入。例如,uploadUrls 是一個常見且通常為必需的選項。

回傳值

此函數回傳一個 companion 實例,具有以下關鍵屬性:

屬性類型描述
handleFunction一個 Express 中介軟體,您必須將其掛載到一個路由上(例如 /companion)。此 handle 包含處理遠端檔案請求的所有邏輯。
setProviderOptions(options: object) => void一個方法,允許您在初始化後動態更新 providerOptions。如果您需要從資料庫載入 API 金鑰或在不重新啟動伺服器的情況下更改設定,這非常有用。

範例:動態提供者選項

您可以在執行時變更提供者選項,這對於多租戶應用程式或當密鑰是異步載入時非常有用。

動態提供者選項

javascript
// 初始化 companion 時,最初不帶提供者選項
const companion = initCompanion({
  path: '/tmp/uploads',
  express,
});

// 稍後,可能在從資料庫獲取密鑰後
async function updateCompanionConfig() {
  const secrets = await getSecretsFromDb();
  companion.setProviderOptions({
    unsplash: {
      key: secrets.unsplashKey,
      secret: secrets.unsplashSecret,
    },
  });
}

額外功能

  • 狀態碼重寫:為了安全和更好的錯誤處理,如果遠端提供者回傳一個狀態碼為 500 或更高的錯誤,此中介軟體會自動將其重寫為 400 Bad Request。這可以防止潛在的伺服器錯誤細節洩漏給用戶端。

Companion 設定完成後,您的上傳器現在能夠處理來自各種來源的檔案。您可能還需要從您的 blocklet 或其他 blocklet 提供靜態檔案。