コンテンツにスキップ
タイプアンロック
ステージクイックウィン
難易度シンプル
ジョブ高速プロトタイプ
対象バックエンド開発者
対象ソロ起業家
サービスパイプ
サービスExec
Hoody の利点HTTP ネイティブ
Hoody の利点埋め込み可能性
タイプアンロック
ステージクイックウィン
難易度シンプル
ジョブ高速プロトタイプ
対象バックエンド開発者
対象ソロ起業家
サービスパイプ
サービスExec
Hoody の利点HTTP ネイティブ
Hoody の利点埋め込み可能性
タイプアンロック
ステージクイックウィン
難易度シンプル
ジョブ高速プロトタイプ
対象バックエンド開発者
対象ソロ起業家
サービスパイプ
サービスExec
Hoody の利点HTTP ネイティブ
Hoody の利点埋め込み可能性
タイプアンロック
ステージクイックウィン
難易度シンプル
ジョブ高速プロトタイプ
対象バックエンド開発者
対象ソロ起業家
サービスパイプ
サービスExec
Hoody の利点HTTP ネイティブ
Hoody の利点埋め込み可能性
PIPE · ブラウザ → STDIN

アップロードコードを 1 行も書かずに、スクリプトへドラッグ&ドロップアップロード

hoody-pipe は所有するすべてのパスで既にウェブアップロードフォームを提供しています。ファイルをページにドロップすれば、バイトはパイプを通ってスクリプトの stdin にストリーミングされます。アップロードコードは 1 行も書いていません。

パイプドキュメントを読む

アップロードコードなし、S3 バケットなし、署名付き URL なし

ドラッグがストリームになるしくみ

hoody-pipe はパスのルートでウェブ UI を、/noscript で JavaScript 不要のフォールバックを実行します。どちらも同じパスを読んでいる相手にマルチパートのバイトをそのままストリーミングします。スクリプトはパイプを読むだけ — 配線はそれだけです。

browser → pipe → stdin4 ステップ · ハンドラー不要
  • 01

    パスを選び、URL を共有

    https://pipe.hoody.com/upload

    予約されていない任意のパスがパイプになります。その URL がアップロードページです。

  • 02

    ユーザーがブラウザでファイルをドロップ

    GET /api/v1/pipe — 自動配信されるアップロードフォーム

    Hoody がフォームを配信します:ドロップゾーン、マルチパートパーサー、CSP nonce、すべて含まれています。/noscript は制限されたブラウザ向けに用意されています。

  • 03

    バイトがパイプを流れる

    PUT /api/v1/pipe/upload (multipart/form-data)

    最初のマルチパートパートが展開され、レシーバーへストリーミングされます。サーバー側のステージングなし、一時ファイルなし。

  • 04

    スクリプトが stdin を読む

    curl …/api/v1/pipe/upload | python process.py

    レシーバーとセンダーは 5 分の TTL 内に接続されます。スクリプトはウェブページの裏にいることを知らず、ただバイトを読みます。

process.sh
# 1. スクリプトがパイプを読む
$curl https://pipe.hoody.com/api/v1/pipe/upload | python process.py
# 2. 誰かがブラウザで https://pipe.hoody.com/upload を開き、
# invoice-q3.pdf をページにドロップ。
# フォームがバイトを PUT で送信。
# 3. スクリプトが stdin を処理して終了
[OK]/data/uploads/invoice-q3.pdf に保存しました

パイプがアップロードサーバーです。スクリプトがレシーバーです。ドロップゾーンと stdin の間に第 3 のプロセスはありません — Lambda も API ゲートウェイも糊付けの関数もありません。

書かずに済んだもの

下記の項目はすべて、単発のアップローダーを作るときに普通なら 1 日仕事になるものです。パイプにはそれらすべてが同梱されています。

WEB FORM

ドロップゾーン、ファイルピッカー、進捗表示

パイプ UI はドラッグ&ドロップエリア、クリックして選ぶフォールバック、進捗フィードバックをレンダリングします。/noscript は JS なしのブラウザ向けに純粋な HTML フォームを配信 — 同じパス、追加コードなし。

TRANSPORT

マルチパートのパースとストリーミング

ブラウザが multipart/form-data を POST すると、サーバーは最初のパートを抽出してストリーミングします。ボディのバッファリングなし、一時ファイルのクリーンアップなし、10 行のマルチパートライブラリなし。

SECURITY

CSP nonce、MIME セーフティ、CORS プリフライト

フォームはフレッシュな CSP nonce で配信されます。危険なコンテンツタイプ (text/html、image/svg+xml、application/javascript) は届く前に text/plain に書き換えられます。OPTIONS がクロスオリジンプリフライトを処理します。

CONNECTION

レシーバー先行でもセンダー先行でも、思いのまま

アップロードの前にスクリプトを実行しても、後でも構いません — パイプは両端が揃うまで最大 5 分の TTL で接続を保持します。レシーバー数 (n) は最大 256 まで設定可能です。

これが置き換えるもの

並べて比較:構築するはずだったアップロードパイプライン と、スクリプトに向ける URL。

項目自分で書くものHoody が渡してくれるもの
  • アップロードフォームFlask アプリ + dropzone.js + CSSGET /api/v1/pipe — すでにフォーム
  • マルチパートパースMulter / formidable / busboyワイヤー上で最初のパートを展開
  • ストレージS3 バケット + 署名付き URL エンドポイントスクリプトに直接ストリーミング
  • ルーティングAPI Gateway + Lambda + IAMパスを選べば、それがルート
  • JS 無効時のフォールバックサーバー側でレンダリングした 2 つ目のフォーム/noscript が無料で配信
  • セキュリティヘッダーCSP、nonce、CORS、MIME ガードパイプに同梱

あなたはスクリプトを書きました。Hoody がアップロードフォームを書きました。

あなたがリリースしたもの

process.py — stdin を読み、仕事をする

while read chunk; do …
HOODY がリリースしたもの

ページ、フォーム、パーサー、セキュリティ

GET /api/v1/pipe — 自動配信
パイプドキュメントを読む

これが置き換えるもの

単発のファイルアップロードが必要なときに開発者が手を伸ばすパターン。どれもセットアップ税を要求します — バケットのプロビジョニング、ミドルウェアのインストール、署名鍵のローテーション。パイプは URL です。

  • AWS S3 (署名付き URL + バケット)バケットを用意し、URL に署名し、期限切れ管理
  • カスタムルーティングエンドポイントアップロードごとに手作りされ、忘れられるルート
  • Multer / formidable ミドルウェアインストールして面倒を見るマルチパートライブラリ
  • ホステッド型 dropzone サービスサードパーティ SaaS、別請求
  • S3 + Lambda アップロードパイプライン1 つのフォームに 2 つのサービスと IAM の糊付け
  • Filestack / Uploadcareベンダー SDK、ベンダーロックイン、ベンダー価格

パスを選んで、パイプを読みましょう。アップロードフォームはその URL ですでに公開済みです。

パイプルーティングガイドを読む

他のユースケースを読む