Pular para o conteúdo
use-cases / drag-drop-uploads-into-your-script / hero
PIPE · BROWSER → STDIN

Uploads por arrastar e soltar direto no seu script, sem código de upload

hoody-pipe já serve um formulário web de upload em cada caminho que ele controla. Arraste um arquivo na página, os bytes fluem pelo pipe e chegam ao stdin do seu script. Você escreveu zero linhas de código de upload.

sem código de upload, sem bucket S3, sem URLs pré-assinadas

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

Como um arrastar vira um stream

hoody-pipe roda uma UI web na raiz do caminho e um fallback sem JavaScript em /noscript. Ambos transmitem bytes multipart direto para quem estiver lendo o mesmo caminho. Seu script lê o pipe — é toda a fiação que existe.

navegador → pipe → stdin4 ETAPAS · ZERO HANDLERS
  • 01

    Escolha um caminho, compartilhe a URL

    https://pipe.hoody.com/upload

    Qualquer caminho que você não tenha reservado vira um pipe. A URL é a página de upload.

  • 02

    O usuário solta um arquivo no navegador

    GET /upload — formulário de upload servido automaticamente

    Hoody serve o formulário para você: zona de drop, parser multipart, nonce CSP, tudo incluso. /noscript existe para navegadores restritos.

  • 03

    Os bytes fluem pelo pipe

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

    A primeira parte multipart é desempacotada e transmitida ao receptor. Sem staging no servidor, sem arquivos temporários.

  • 04

    Seu script lê o stdin

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

    Receptor e remetente se conectam dentro de um TTL de 5 minutos. O script não sabe que está atrás de uma página web — ele apenas lê os bytes.

process.sh
# 1. seu script lê o pipe
$curl https://pipe.hoody.com/api/v1/pipe/upload | python process.py
# 2. alguém abre https://pipe.hoody.com/upload no navegador,
# arrasta invoice-q3.pdf na página,
# o formulário envia os bytes via PUT até você.
# 3. seu script processa o stdin e termina
[OK]salvo em /data/uploads/invoice-q3.pdf

O pipe é o servidor de upload. Seu script é o receptor. Não há um terceiro processo — sem Lambda, sem API gateway, sem função de cola — entre a zona de drop e seu stdin.

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

O que você não precisou escrever

Cada item abaixo é um dia normal de trabalho para construir um uploader pontual. O pipe já vem com tudo isso.

FORMULÁRIO WEB

Zona de drop, seletor de arquivo, progresso

A UI do pipe renderiza uma área de arrastar e soltar, um fallback de clique-para-escolher e feedback de progresso. /noscript serve um formulário HTML puro para navegadores sem JS — mesmo caminho, sem código extra.

TRANSPORTE

Parsing e streaming multipart

Quando o navegador faz POST de multipart/form-data, o servidor extrai a primeira parte e a transmite. Sem buffering do corpo, sem limpeza de arquivos temporários, sem biblioteca multipart de dez linhas.

SEGURANÇA

Nonce CSP, segurança MIME, preflight CORS

O formulário vem com um nonce CSP novo. Tipos de conteúdo perigosos (text/html, image/svg+xml, application/javascript) são reescritos como text/plain antes de chegar até você. OPTIONS lida com o preflight cross-origin.

CONEXÃO

Receptor primeiro ou remetente primeiro, você decide

Rode seu script antes de alguém fazer upload, ou depois — o pipe segura a conexão por até 5 minutos de TTL até que ambos os lados estejam presentes. A contagem de receptores (n) é configurável até 256.

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

O que isto substitui

Lado a lado: o pipeline de upload que você teria construído, versus a URL que você aponta para seu script.

AspectoO que você escreveriaO que o Hoody entrega
  • Formulário de uploadApp Flask + dropzone.js + CSSGET /upload — já é um formulário
  • Parsing multipartMulter / formidable / busboyPrimeira parte desempacotada na rede
  • ArmazenamentoBucket S3 + endpoint de URL pré-assinadaStream direto para seu script
  • RoteamentoAPI Gateway + Lambda + IAMEscolha um caminho, essa é a rota
  • Fallback sem JSSegundo formulário, renderizado no servidor/noscript serve de graça
  • Cabeçalhos de segurançaCSP, nonce, CORS, proteções MIMEJá vem com o pipe
use-cases / drag-drop-uploads-into-your-script / punchline

Você escreveu o script. O Hoody escreveu o formulário de upload.

VOCÊ ENTREGOU

process.py — lê stdin, faz o trabalho

while read chunk; do …
HOODY ENTREGOU

a página, o formulário, o parser, a segurança

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

O que isto substitui

Os padrões que devs usam quando precisam de um upload de arquivo pontual. Cada um cobra um imposto de setup — buckets para provisionar, middleware para instalar, chaves de assinatura para rotacionar. O pipe é uma URL.

  • AWS S3 (URLs pré-assinadas + bucket)Provisione um bucket, assine URLs, expire-as
  • Endpoints de roteamento customRota por upload, feita à mão e esquecida
  • Middleware Multer / formidableBiblioteca multipart para instalar e dar manutenção
  • Serviços de dropzone hospedadosSaaS de terceiro, faturamento separado
  • Pipelines de upload S3 + LambdaDois serviços e cola de IAM para um formulário
  • Filestack / UploadcareSDK do fornecedor, lock-in, preço do fornecedor
use-cases / drag-drop-uploads-into-your-script / cta

Escolha um caminho. Leia o pipe. O formulário de upload já está no ar nessa URL.

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

Leia os outros