跳转到内容
use-cases / drag-drop-uploads-into-your-script / hero
PIPE · 浏览器 → STDIN

把拖拽上传接进你的脚本,零行上传代码

hoody-pipe 在它持有的每条路径上,已经自动提供一个网页上传表单。把文件拖到页面上,字节就通过管道流到你脚本的 stdin。你写了零行上传代码。

阅读 pipe 文档

无上传代码、无 S3 桶、无预签名 URL

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

一次拖拽如何变成一段流

hoody-pipe 在路径根处运行一个网页 UI,在 /noscript 提供无 JavaScript 的回退。两者都把 multipart 字节直接流给读取同一条路径的人。你的脚本读管道——这就是全部连接。

浏览器 → 管道 → stdin4 步 · 零处理器
  • 01

    选一条路径,分享 URL

    https://pipe.hoody.com/upload

    任何你没保留的路径都成为一条管道。这个 URL 就是上传页面。

  • 02

    用户在浏览器里拖入文件

    GET /upload — 自动托管的上传表单

    Hoody 帮你提供这个表单:拖放区、multipart 解析器、CSP nonce,全部内建。/noscript 为受限浏览器准备。

  • 03

    字节穿过管道

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

    第一个 multipart 部分被解包并流给接收端。无服务端暂存、无临时文件。

  • 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

管道就是上传服务器。你的脚本就是接收端。两者之间没有第三个进程——没有 Lambda、没有 API 网关、没有胶水函数——把拖放区和你的 stdin 隔开。

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

你不必再写的东西

下面每一项,如果让你为一个一次性上传器写,都是一天的活。管道把它们都内置好了。

网页表单

拖放区、文件选择、进度反馈

管道 UI 渲染拖拽区域、点击选择回退,以及进度反馈。/noscript 为没有 JS 的浏览器提供纯 HTML 表单——同一条路径,无需额外代码。

传输

Multipart 解析与流式转发

当浏览器 POST multipart/form-data 时,服务器提取第一个部分并流式转发。无 body 缓冲、无临时文件清理、无十行的 multipart 库。

安全

CSP nonce、MIME 防护、CORS 预检

表单自带新鲜的 CSP nonce。危险的内容类型(text/html、image/svg+xml、application/javascript)在抵达你之前会被改写为 text/plain。OPTIONS 处理跨域预检。

连接

接收端先连或发送端先连,你说了算

在有人上传之前先跑你的脚本,或之后再跑都行——管道会保持连接,直到双方都到位,最多 5 分钟 TTL。接收端数量(n)可配置,最多 256。

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

这取代了什么

并排对比:你本来要搭的上传链路,与你只需要指向脚本的那个 URL。

关注点你本要写的Hoody 直接给你的
  • 上传表单Flask app + dropzone.js + CSSGET /upload — 已经是表单
  • Multipart 解析Multer / formidable / busboy第一段在传输中即被解包
  • 存储S3 桶 + 预签名 URL 端点直接流入你的脚本
  • 路由API Gateway + Lambda + IAM选一条路径,那就是路由
  • 禁用 JS 回退第二份服务端渲染表单/noscript 免费提供
  • 安全头CSP、nonce、CORS、MIME 防护随管道附带
use-cases / drag-drop-uploads-into-your-script / punchline

你写脚本。Hoody 写上传表单。

你交付的

process.py — 读 stdin,干活

while read chunk; do …
HOODY 交付的

页面、表单、解析器、安全

GET /upload — 自动托管
阅读 pipe 文档
use-cases / drag-drop-uploads-into-your-script / replaces

这取代了什么

开发者在需要一次性文件上传时常用的那些方案。每一个都收一笔搭建税——要开桶、要装中间件、要轮换签名密钥。管道只是一个 URL。

  • AWS S3(预签名 URL + 桶)开桶、签 URL、设过期
  • 自定义路由端点为每次上传手写一个,然后被遗忘
  • Multer / formidable 中间件要装、要照看的 multipart 库
  • 托管型 dropzone 服务第三方 SaaS,独立账单
  • S3 + Lambda 上传链路为一个表单配两个服务加 IAM 胶水
  • Filestack / Uploadcare厂商 SDK、厂商锁定、厂商定价
use-cases / drag-drop-uploads-into-your-script / cta

选一条路径。读这条管道。上传表单已经在那个 URL 上跑着了。

阅读 pipe 路由指南
use-cases / drag-drop-uploads-into-your-script / related

阅读其他内容