Zum Inhalt springen
use-cases / drag-drop-uploads-into-your-script / hero
PIPE · BROWSER → STDIN

Drag-and-Drop-Uploads in dein Skript, ohne eine Zeile Upload-Code

hoody-pipe liefert bereits auf jedem Pfad, der ihm gehört, ein Web-Upload-Formular. Zieh eine Datei auf die Seite, die Bytes streamen durch die Pipe direkt in das stdin deines Skripts. Du hast null Zeilen Upload-Code geschrieben.

Pipe-Docs lesen

kein Upload-Code, kein S3-Bucket, keine Presigned URLs

use-cases / drag-drop-uploads-into-your-script / mechanism

Wie ein Drag zum Stream wird

hoody-pipe liefert eine Web-UI am Pfad-Root und einen JavaScript-freien Fallback unter /noscript. Beide streamen Multipart-Bytes direkt an denjenigen weiter, der denselben Pfad liest. Dein Skript liest die Pipe — das ist die ganze Verkabelung.

Browser → Pipe → stdin4 SCHRITTE · NULL HANDLER
  • 01

    Pfad wählen, URL teilen

    https://pipe.hoody.com/upload

    Jeder Pfad, den du nicht reserviert hast, wird zur Pipe. Die URL ist die Upload-Seite.

  • 02

    Nutzer legt eine Datei im Browser ab

    GET /upload — automatisch ausgeliefertes Upload-Formular

    Hoody liefert das Formular für dich: Drop-Zone, Multipart-Parser, CSP-Nonce, alles enthalten. /noscript existiert für eingeschränkte Browser.

  • 03

    Bytes streamen durch die Pipe

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

    Der erste Multipart-Teil wird ausgepackt und an den Empfänger gestreamt. Kein Server-Staging, keine temporären Dateien.

  • 04

    Dein Skript liest stdin

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

    Empfänger und Sender verbinden sich innerhalb einer 5-Minuten-TTL. Das Skript weiß nicht, dass es hinter einer Webseite steht — es liest einfach die Bytes.

process.sh
# 1. dein Skript liest die Pipe
$curl https://pipe.hoody.com/api/v1/pipe/upload | python process.py
# 2. jemand öffnet https://pipe.hoody.com/upload im Browser,
# legt invoice-q3.pdf auf der Seite ab,
# das Formular PUTtet die Bytes zu dir durch.
# 3. dein Skript verarbeitet stdin und ist fertig
[OK]gespeichert nach /data/uploads/invoice-q3.pdf

Die Pipe ist der Upload-Server. Dein Skript ist der Empfänger. Es gibt keinen dritten Prozess — kein Lambda, kein API Gateway, keine Glue-Funktion — zwischen Drop-Zone und deinem stdin.

use-cases / drag-drop-uploads-into-your-script / no-code

Was du nicht schreiben musstest

Jeder Punkt unten ist ein normales Tagewerk, wenn du einen einmaligen Uploader bauen willst. Die Pipe bringt all das mit.

WEB-FORMULAR

Drop-Zone, Datei-Picker, Fortschritt

Die Pipe-UI rendert eine Drag-and-Drop-Fläche, einen Klick-zum-Auswählen-Fallback und Fortschrittsanzeige. /noscript liefert ein reines HTML-Formular für Browser ohne JS — gleicher Pfad, kein zusätzlicher Code.

TRANSPORT

Multipart-Parsing und Streaming

Wenn der Browser multipart/form-data POSTet, extrahiert der Server den ersten Teil und streamt ihn. Kein Body-Buffering, kein Aufräumen temporärer Dateien, keine zehnzeilige Multipart-Library.

SECURITY

CSP-Nonce, MIME-Sicherheit, CORS-Preflight

Das Formular kommt mit einer frischen CSP-Nonce. Gefährliche Content-Types (text/html, image/svg+xml, application/javascript) werden zu text/plain umgeschrieben, bevor sie dich erreichen. OPTIONS übernimmt den Cross-Origin-Preflight.

VERBINDUNG

Empfänger zuerst oder Sender zuerst, deine Wahl

Starte dein Skript bevor jemand uploadet, oder danach — die Pipe hält die Verbindung bis zu einer 5-Minuten-TTL offen, bis beide Enden da sind. Empfängerzahl (n) ist konfigurierbar bis 256.

use-cases / drag-drop-uploads-into-your-script / compare

Was das ersetzt

Seite an Seite: die Upload-Pipeline, die du gebaut hättest, gegen die URL, auf die du dein Skript zeigst.

AnliegenWas du schreiben würdestWas Hoody dir liefert
  • Upload-FormularFlask-App + dropzone.js + CSSGET /upload — schon ein Formular
  • Multipart-ParsingMulter / formidable / busboyErster Teil auf der Leitung ausgepackt
  • StorageS3-Bucket + Presigned-URL-EndpointDirekt in dein Skript streamen
  • RoutingAPI Gateway + Lambda + IAMPfad wählen, das ist die Route
  • JS-deaktiviert-FallbackZweites Formular, server-rendered/noscript liefert es kostenlos
  • Security-HeaderCSP, Nonce, CORS, MIME-GuardsMit der Pipe ausgeliefert
use-cases / drag-drop-uploads-into-your-script / punchline

Du hast das Skript geschrieben. Hoody hat das Upload-Formular geschrieben.

DU HAST GELIEFERT

process.py — stdin lesen, die Arbeit machen

while read chunk; do …
HOODY HAT GELIEFERT

die Seite, das Formular, den Parser, die Security

GET /upload — automatisch ausgeliefert
Pipe-Docs lesen
use-cases / drag-drop-uploads-into-your-script / replaces

Was das ersetzt

Die Patterns, zu denen Entwickler greifen, wenn sie einen einmaligen Datei-Upload brauchen. Jedes davon kostet Setup-Steuer — Buckets bereitstellen, Middleware installieren, Signing-Keys rotieren. Die Pipe ist eine URL.

  • AWS S3 (Presigned URLs + Bucket)Bucket bereitstellen, URLs signieren, ablaufen lassen
  • Eigene Routing-EndpointsPro-Upload-Route, handgebaut und vergessen
  • Multer / formidable MiddlewareMultipart-Library zum Installieren und Babysitten
  • Gehostete Dropzone-ServicesDrittanbieter-SaaS, separate Abrechnung
  • S3 + Lambda Upload-PipelinesZwei Services und IAM-Glue für ein Formular
  • Filestack / UploadcareVendor-SDK, Vendor-Lock-in, Vendor-Pricing
use-cases / drag-drop-uploads-into-your-script / cta

Pfad wählen. Pipe lesen. Das Upload-Formular ist auf dieser URL bereits live.

use-cases / drag-drop-uploads-into-your-script / related

Lies die anderen