Ir al contenido
use-cases / drag-drop-uploads-into-your-script / hero
PIPE · NAVEGADOR → STDIN

Subidas drag-and-drop a tu script, sin escribir código de subida

hoody-pipe ya sirve un formulario de subida web en cada ruta que controla. Arrastra un archivo a la página, los bytes fluyen por el pipe y entran al stdin de tu script. Has escrito cero líneas de código de subida.

sin código de subida, sin bucket S3, sin URLs presignadas

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

Cómo un drag se convierte en un stream

hoody-pipe ejecuta una UI web en la raíz de la ruta y un fallback sin JavaScript en /noscript. Ambos transmiten bytes multipart directamente a quien esté leyendo la misma ruta. Tu script lee el pipe — esa es toda la fontanería.

navegador → pipe → stdin4 PASOS · CERO HANDLERS
  • 01

    Elige una ruta, comparte la URL

    https://pipe.hoody.com/upload

    Cualquier ruta que no hayas reservado se convierte en un pipe. La URL es la página de subida.

  • 02

    El usuario suelta un archivo en el navegador

    GET /upload — formulario de subida autoservido

    Hoody te sirve el formulario: zona de drop, parser multipart, nonce de CSP, todo incluido. /noscript existe para navegadores restringidos.

  • 03

    Los bytes fluyen por el pipe

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

    La primera parte multipart se desempaqueta y se transmite al receptor. Sin staging en el servidor, sin archivos temporales.

  • 04

    Tu script lee stdin

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

    Receptor y emisor se conectan dentro de un TTL de 5 minutos. El script no sabe que está detrás de una página web — simplemente lee los bytes.

process.sh
# 1. tu script lee el pipe
$curl https://pipe.hoody.com/api/v1/pipe/upload | python process.py
# 2. alguien abre https://pipe.hoody.com/upload en un navegador,
# arrastra invoice-q3.pdf sobre la página,
# el formulario hace PUT de los bytes hacia ti.
# 3. tu script procesa stdin y termina
[OK]guardado en /data/uploads/invoice-q3.pdf

El pipe es el servidor de subida. Tu script es el receptor. No hay un tercer proceso — sin Lambda, sin API gateway, sin función de pegamento — entre la zona de drop y tu stdin.

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

Lo que no tuviste que escribir

Cada elemento de abajo es el trabajo de un día normal para construir un uploader puntual. El pipe trae todo eso de serie.

FORMULARIO WEB

Zona de drop, selector de archivos, progreso

La UI del pipe renderiza un área drag-and-drop, un fallback de clic-para-elegir, y feedback de progreso. /noscript sirve un formulario HTML puro para navegadores sin JS — misma ruta, sin código adicional.

TRANSPORTE

Parsing multipart y streaming

Cuando el navegador hace POST de multipart/form-data, el servidor extrae la primera parte y la transmite. Sin buffering del cuerpo, sin limpieza de archivos temporales, sin librería multipart de diez líneas.

SEGURIDAD

Nonce CSP, seguridad MIME, preflight CORS

El formulario trae un nonce CSP fresco. Los content-types peligrosos (text/html, image/svg+xml, application/javascript) se reescriben a text/plain antes de llegarte. OPTIONS gestiona el preflight cross-origin.

CONEXIÓN

Receptor primero o emisor primero, tú decides

Ejecuta tu script antes o después de que alguien suba — el pipe mantiene la conexión hasta un TTL de 5 minutos hasta que ambos extremos estén presentes. El número de receptores (n) es configurable hasta 256.

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

Lo que esto reemplaza

Lado a lado: el pipeline de subida que habrías construido, frente a la URL a la que apuntas tu script.

AsuntoLo que escribiríasLo que Hoody te entrega
  • Formulario de subidaApp Flask + dropzone.js + CSSGET /upload — ya es un formulario
  • Parsing multipartMulter / formidable / busboyPrimera parte desempaquetada en el cable
  • AlmacenamientoBucket S3 + endpoint de URLs presignadasStream directo a tu script
  • RoutingAPI Gateway + Lambda + IAMElige una ruta, esa es la ruta
  • Fallback sin JSSegundo formulario, renderizado en servidor/noscript lo sirve gratis
  • Cabeceras de seguridadCSP, nonce, CORS, guardas MIMEIncluido con el pipe
use-cases / drag-drop-uploads-into-your-script / punchline

Tú escribiste el script. Hoody escribió el formulario de subida.

TÚ ENVIASTE

process.py — lee stdin, haz el trabajo

while read chunk; do …
HOODY ENVIÓ

la página, el formulario, el parser, la seguridad

GET /upload — autoservido
use-cases / drag-drop-uploads-into-your-script / replaces

Lo que esto reemplaza

Los patrones a los que recurren los desarrolladores cuando necesitan una subida de archivo puntual. Cada uno cobra un peaje de configuración — buckets que aprovisionar, middleware que instalar, claves de firma que rotar. El pipe es una URL.

  • AWS S3 (URLs presignadas + bucket)Aprovisiona un bucket, firma URLs, expíralas
  • Endpoints de routing personalizadosRuta por subida, hecha a mano y olvidada
  • Middleware Multer / formidableLibrería multipart que instalar y cuidar
  • Servicios dropzone alojadosSaaS de terceros, facturación aparte
  • Pipelines S3 + Lambda de subidaDos servicios y pegamento IAM para un formulario
  • Filestack / UploadcareSDK de proveedor, vendor lock-in, precios del proveedor
use-cases / drag-drop-uploads-into-your-script / cta

Elige una ruta. Lee el pipe. El formulario de subida ya está vivo en esa URL.

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

Lee los otros