transfer.sh 介绍与选型指南
transfer.sh 是 Go 编写的命令行文件分享服务,本文覆盖项目定位、核心架构、功能特性、快速开始示例、适用场景与限制,并与 Plik、PicoShare、goploader、PsiTransfer 做同类自托管组件选型对比,全部信息联网溯源并标注查询日期。
transfer.sh 介绍与选型指南
> 目标:介绍 transfer.sh——Go 编写的命令行文件分享服务("Easy and fast file sharing from the command-line"),覆盖项目定位、核心架构、功能特性、最小可用示例与同类自托管组件选型对比。本文为认知与选型篇,全部信息均联网溯源并标注来源与查询日期(2026-11-01),不含本地实测;部署、配置与命令的实测细节见系列后续各篇。
一、环境信息(溯源说明)
本文是认知与选型篇,不含本地实测,以下为溯源对象与信息渠道:
- 溯源对象:transfer.sh(GitHub 仓库
dutchcoders/transfer.sh) - 溯源日期:2026-11-01(本文全部版本号、星数、维护状态、特性清单均在该日联网实查)
- 信息渠道:GitHub 仓库页 HTML(星数/fork 数/归档状态/license)、GitHub Releases 页与 tags 页(版本与发布日期)、仓库 README(功能特性、用法示例、参数表)、commits atom feed(最近提交记录)
- 星数取证方式:shields.io stars 徽章 JSON(
https://img.shields.io/github/stars/dutchcoders/transfer.sh.json)返回{"label":"stars","message":"16k",...},与仓库页 HTML 内嵌数据stargazerCount:15904相互印证 - 系列后续篇章:《transfer.sh 1.6.1 Docker Compose 部署指南》、《transfer.sh 1.6.1 配置参数详解》、《transfer.sh 1.6.1 curl 上传下载命令详解》
二、软件概述
2.1 项目定位
transfer.sh 自我描述为「Easy and fast file sharing from the command-line. This code contains the server with everything you need to create your own instance.」(来源:仓库 README,查询日期 2026-11-01)。它解决的是一个在服务器运维场景中极为高频的需求:两台机器之间快速交换一个文件,而不想架 FTP、不想开 SFTP 账号、也不想传网盘再拷链接。它的全部交互都发生在命令行里——上传是 curl --upload-file,下载是 curl,服务端返回一个可直接下载的 URL,配合管道与脚本可以无缝嵌入自动化流程。
它同时是一个自托管服务端:仓库内包含完整的服务端代码,单二进制即可运行,支持 local(本地磁盘)、s3(Amazon S3 及兼容端点)、gdrive(Google Drive)、storj(Storj 去中心化存储)四种存储后端。项目由 Remco Verhoef(dutchcoders)创建,当前维护者为 Francesca Schicchera(francescayeye)与 Stefan Benten(stefanbenten),采用 MIT 许可证(来源:仓库 README「Creators / Maintainers / Copyright and License」章节,查询日期 2026-11-01)。
💡 技术拓展:命令行文件分享(CLI-first file sharing)这一形态下,客户端方案有两类——
方案 原理/特点 适用场景 纯 curl 工作流 零客户端安装, curl --upload-file直传,服务器原生自带 curl服务器间临时传文件、脚本/CI 内嵌传输 专用 CLI 客户端 项目自带二进制客户端(如 goploader 的 gpldr、Plik 的plik),体验更细(进度条/剪贴板)固定团队日常使用、需要统一配置 transfer.sh 采用纯 curl 工作流——服务端协议就是普通 HTTP PUT/GET,任何带 curl 的机器即开即用,这是它与同类工具最大的形态差异。
2.2 项目身份与维护状态(2026-11-01 实查)
社区内流传「transfer.sh 仓库已归档停更」的说法,本文以仓库页实查数据为准:
| 核实项 | 实查结果 | 取证来源 |
|---|---|---|
| 归档状态 | 未归档(仓库页 payload isArchived:false) | 仓库页 HTML,2026-11-01 |
| 星数 | 15904(shields.io 徽章口径 16k) | shields.io JSON + 仓库页 HTML,2026-11-01 |
| fork 数 | 1582 | 仓库页 HTML,2026-11-01 |
| watch 数 | 200 | 仓库页 HTML,2026-11-01 |
| 许可证 | MIT | 仓库页 HTML + LICENSE 文件 |
| 最新正式发行版 | v1.6.1(2023-12-04 打标) | GitHub tags/releases 页,2026-11-01 |
| 最近提交 | 2026-10-31(维护者 francescayeye 更新 README、Dockerfile、release.yml、新增 SECURITY.md) | commits atom feed,2026-11-01 |
结论:仓库未归档,但 2023-12 之后约三年无正式发行版,处于「低频维护」状态;2026-10-31 维护者恢复了 README 与发布流水线层面的提交,社区活跃度有回暖迹象。选型时应把「发行版更新慢」当作现实约束(详见六、2 小节)。
版本节奏(来源:GitHub Releases/tags 页,查询日期 2026-11-01):
| 版本 | 打标日期 | 关键内容 |
|---|---|---|
| v1.6.1 | 2023-12-04 | 修复 v1.6.0 引入的 basic auth 绕过缺陷(IP 白名单场景);autocert TLS 配置修正;依赖升级 |
| v1.6.0 | 2023-11 | 新增 http-auth-htpasswd(htpasswd 文件认证);aws-sdk-go 升级 v2;Go 1.20 构建 |
| v1.5.0 | 2023-03-11 | gpg 服务端加密支持(X-Encrypt-Password/X-Decrypt-Password);HTTP Range 断点/范围下载 |
| v1.3.2 | 2022 | ClamAV 病毒预扫描(--perform-clamav-prescan); Storj 依赖升级 |
| v1.3.1 | 2021 | Max-Days 过大值返回 400;Nix Flake |
| v1.2.6 | 2021-07-06 | 开始随 Releases 提供多平台静态二进制 |
| v1.2.3 | 2021-05-01 | GitHub Actions 发布流水线 |
三、核心架构
3.1 请求处理模型:PUT 上传、GET 下载
transfer.sh 服务端本质是一个极简的 HTTP 文件网关,协议面只有两个动词(来源:仓库 README「Usage」章节,查询日期 2026-11-01):
- 上传 = HTTP PUT:
curl --upload-file ./hello.txt https://transfer.sh/hello.txt——服务端把请求体按字节流落盘(或转发到对象存储),生成「随机短 token + 文件名」的下载路径,并在响应体返回完整下载 URL; - 下载 = HTTP GET:拿到 URL 后
curl https://transfer.sh/<token>/hello.txt即取回文件;/get/<token>/file与/inline/<token>/file两个别名分别提供「强制下载(Content-Disposition: attachment)」与「内联渲染(按 MIME 直接展示)」两种取回形态。
整个过程没有登录、没有上传表单、没有中间确认页——HTTP 协议本身就是 UI。删除不走专用接口,而是上传时服务端在响应头 X-Url-Delete 里返回一个带删除令牌的 URL,对它发 curl -X DELETE 即可删除文件,令牌不泄露则文件无法被第三方删除。
3.2 存储后端抽象
服务端通过 --provider 参数在四种存储后端间切换(来源:仓库 README「Usage」参数表与 S3/Storj/GDrive 章节,查询日期 2026-11-01):
💡 技术拓展:transfer.sh 可选的四类存储后端横向对比——
后端 --provider取值数据落在哪 关键参数 适用场景 本地磁盘 local--basedir指定的目录--basedir、--temp-path单机自托管、内网快传,最简 S3 及兼容 s3S3 桶(AWS 或任意兼容端点) --aws-access-key、--bucket、--s3-endpoint、--s3-region数据与计算分离、扩容不改架构 Google Drive gdriveOAuth 授权的云端盘 --gdrive-client-json-filepath、--gdrive-local-config-path借用现成云盘额度 Storj storj去中心化对象网络 --storj-access、--storj-bucket无信任中心的加密对象存储 本系列各篇实际采用
local后端:单二进制 + 单目录即可完整复现全部功能面,也是内网场景的主流选择。
其中 S3 后端通过 --s3-endpoint 支持任意 S3 兼容服务(README 明确注明 MinIO 需要 --s3-path-style 打开路径风格寻址);local 后端数据全部落在 --basedir 单目录内,配合 --purge-days/--purge-interval 可以做自动过期清理。
3.3 安全与控制机制
transfer.sh 的安全控制面完全由「请求头 + 服务端参数」构成(来源:仓库 README「Request Headers」「Response Headers」与参数表,查询日期 2026-11-01):
- 限次限期:上传时带
Max-Downloads: 1限制下载次数、Max-Days: 1限制存活天数,到期/超次后自动删除; - 上传认证:
--http-auth-user/--http-auth-pass(或--http-auth-htpasswd文件)启用 HTTP Basic 认证,--http-auth-ip-whitelist可放行指定 IP 免认证; - IP 过滤:
--ip-whitelist/--ip-blacklist控制可访问服务端的源地址; - 服务端加密:v1.5.0 起支持
X-Encrypt-Password请求头,上传内容以 AES-256 在服务端加密落盘,下载时用X-Decrypt-Password解密;客户端侧亦可先 GPG 对称加密再上传(README 给出gpg | curl管道示例); - 删除令牌:
X-Url-Delete响应头返回带随机令牌的删除 URL,令牌长度由--random-token-length控制(下载 token 长度的两倍); - 病毒扫描:
--clamav-host/--perform-clamav-prescan可对接 ClamAV 对上传内容做预扫描。
💡 技术拓展:文件分享场景的两种加密路径对比——
路径 原理 密钥暴露面 适用场景 服务端加密( X-Encrypt-Password)内容以 AES-256 在服务端落盘加密 服务端同时见到密文与处理请求,密码经 HTTPS 传输到服务端 自托管实例,信任自家服务器、防存储层泄露 客户端加密(GPG 管道) 先 gpg --symmetric加密成密文流再上传服务端只见密文,密码永不出本机 跨不可信网络传敏感文件,端到端保密 transfer.sh 两者都支持;README 明确警示
X-Encrypt-Password只应在自托管实例上使用(不应把密码交给第三方公共服务)。
四、功能特性
以下特性清单逐条溯源自仓库 README(查询日期 2026-11-01):
- 纯命令行工作流:上传、下载、删除全由 curl 完成,无需浏览器;
- 管道友好:
cat file | curl --upload-file - https://transfer.sh/file支持从标准流上传;README 提供transfer()shell 函数,可把整个目录自动打 zip 上传; - 限次限期:
Max-Downloads/Max-Days请求头按文件粒度控制; - 删除令牌:
X-Url-Delete响应头,随传随得,curl -X DELETE即删; - 服务端 AES-256 加密(v1.5.0+):
X-Encrypt-Password/X-Decrypt-Password; - GPG 端到端加密:官方给出「加密上传 / 下载解密」管道示例;
- 范围下载(v1.5.0+):接受 HTTP Range 请求,支持断点续传与部分取回;
- 直链与内联别名:
/get/、/inline/路径别名控制取回形态; - 多存储后端:local / s3(含 MinIO 等兼容端点)/ gdrive / storj;
- 自动过期清理:
--purge-days/--purge-interval(S3 与 Storj 后端除外); - 上传限速与限流:
--max-upload-size(KB)与--rate-limit(请求/分钟); - ClamAV 病毒预扫描(v1.3.2+):可要求每个上传先过本地 clamd 扫描;
- TLS:内建 Let's Encrypt 自动签发(
--lets-encrypt-hosts)与自定义证书两条路径; - VirusTotal 集成:
PUT /file/virustotal触发在线扫描(需--virustotal-key)。
五、快速开始(最小可用示例)
本节命令溯源自官方 README(查询日期 2026-11-01),为官方给出的原样示例:
上传一个文件到公共服务实例:
$ curl -v --upload-file ./hello.txt https://transfer.sh/hello.txt
配合管道加密上传(客户端 GPG 对称加密,密钥不出本机):
$ gpg --armor --symmetric --output - /tmp/hello.txt | curl --upload-file - https://transfer.sh/test.txt
下载并解密:
$ curl https://transfer.sh/1lDau/test.txt | gpg --decrypt --output /tmp/hello.txt
自托管最小启动(官方 README「Docker」章节给出的单行启动,容器化部署的完整 Compose 步骤、数据持久化与参数说明见《transfer.sh 1.6.1 Docker Compose 部署指南》):
docker run --publish 8080:8080 dutchcoders/transfer.sh:latest-noroot --provider local --basedir /tmp/
⚠️ 注意:README 明确不建议在生产用
latest标签(可能指向未发布的开发构建),应使用vx.y.z或vx.y.z-noroot版本标签;-noroot后缀的镜像以非特权 UID/GID 5000 运行,官方标注为推荐用法。
六、适用场景与限制
6.1 适用场景
- 服务器间临时传文件:运维最典型场景——没有共享存储、不想开 SFTP,一条 curl 解决;
- 脚本与 CI/CD 内嵌传输:构建产物、日志、抓包文件随流水线上传,配合
Max-Days自动过期,不留垃圾; - 命令输出快速分享:
dmesg | curl --upload-file - https://<host>/dmesg.txt把排障现场发给同事; - 给非技术同事发文件:返回的 URL 在浏览器可直接下载,
/get/别名强制走下载而非预览; - 中等规模自托管分享服务:S3/Storj 后端 + 限流 + 认证 + 病毒扫描的组合可作为团队级对外分享服务底座。
6.2 已知限制与风险
- 无 Web 上传界面:默认前端页面仅提供下载与(受限的)删除能力,上传必须走命令行——非技术用户自传文件需要指导;README 亦说明仓库不背书任何第三方公共实例,建议自托管;
- 发行版更新慢:最新正式版 v1.6.1 停留在 2023-12-04(查询日期 2026-11-01),期间仅 2026-10-31 恢复了文档与构建层面提交;依赖的 CVE 修复与新特性需等发行版跟进;
- 安全告警未随发行版修复:README 顶部保留 SECURITY WARNING 横幅(issue #670)——「IP filter and HTTP auth bypass via unauthenticated X-Forwarded-For header spoofing」:攻击者可通过伪造
X-Forwarded-For头绕过 IP 白名单与 HTTP 认证(查询日期 2026-11-01,来源:仓库 README 横幅及 issue 链接)。在官方修复发布前,暴露公网的实例应在反向代理层收敛该头(只信任代理自身注入的 X-Forwarded-For,并在网关处丢弃客户端原始值); - 删除令牌即唯一删除凭证:
X-Url-Delete丢失后无法删除文件(服务端无管理接口),运维上需要把删除令牌与下载 URL 一并落日志; - gdrive/storj 后端额外依赖 OAuth/Access Grant 配置,内网环境通常无此条件,选型时按需评估。
七、同类选型对比
7.1 量化对比(社区活跃度与版本节奏)
自托管临时文件分享领域可选项众多。下表对比本平台已收录的四个同领域代表项目(星数取自 shields.io stars 徽章 JSON 及各项目仓库页,版本号取自各项目官方 Releases 页与官方 Docker Hub 推送记录;各项目数据的具体查询日期与出处见其对应文档,transfer.sh 为本文 2026-11-01 实查):
| 项目 | 语言 | 最新稳定版 | 版本日期 | GitHub 星数 | 交互形态 | 存储后端 |
|---|---|---|---|---|---|---|
| transfer.sh | Go | v1.6.1 | 2023-12-04 | 15.9k(16k 徽章口径) | 纯 CLI(curl) | local/s3/gdrive/storj |
| PicoShare | Go | v1.5.4 | 2026-05-26 | 3.1k | Web UI 为主 | 本地磁盘 |
| PsiTransfer | Node.js | v2.4.5 | 2025 | ~2k | Web UI(bundle 上传) | 本地磁盘 |
| Plik | Go | 1.4.3 | 2024 | 1.8k | Web UI + 专用 CLI | 多后端(含 E2EE) |
| goploader | Go | 1.0.2 | 2025 | ~301 | 服务端 + CLI 客户端 | 本地磁盘 |
(PicoShare 3.1k、Plik 1.8k 查询日期 2026-10-30/2026-10-31;PsiTransfer 2k、goploader 301302 查询日期 2026-11-01/2026-10-30;各项目功能口径以官方仓库描述为准,详见 《PicoShare 介绍与选型指南》、《PsiTransfer 2.4.5 介绍与选型指南》、《Plik 介绍与选型指南》、《goploader 1.0.2 介绍与选型指南》。)
关键解读:transfer.sh 的星数(15.9k)是其余四个项目之和的两倍以上,是该领域知名度最高、生态检验最充分的项目;但它的发行版节奏(v1.6.1 停留三年)明显慢于 PicoShare/PsiTransfer 等活跃项目,属于「体量大、迭代慢」的长跑型项目。
7.2 能力矩阵对比
| 能力 | transfer.sh | Plik | PicoShare | goploader | PsiTransfer |
|---|---|---|---|---|---|
| 上传通道 | curl PUT(无客户端) | Web + 专用 CLI | Web UI | gpldr CLI / curl | Web UI(多文件 bundle) |
| 限下载次数 | ✅ Max-Downloads 头 | ✅ | ❌ | ✅(一次性) | ✅(可选) |
| 限存活天数 | ✅ Max-Days 头 | ✅ | ✅(可选过期) | ✅ | ✅ |
| 删除令牌 | ✅ X-Url-Delete | ✅ | ✅(管理链接) | ✅ | ✅ |
| 服务端加密 | ✅ AES-256(v1.5.0+) | ❌(客户端 E2EE 可选) | ❌ | ❌ | ❌ |
| 客户端 E2EE | ✅(GPG 管道) | ✅ | ❌ | ❌ | ✅(可配) |
| 范围/断点下载 | ✅(v1.5.0+) | ✅(流式) | ❌ | ❌ | ✅(流式) |
| 对象存储后端 | ✅ s3/gdrive/storj | ✅(多后端) | ❌(本地) | ❌(本地) | ❌(本地) |
| 上传认证 | ✅ Basic Auth + htpasswd + IP 白名单 | ✅(admin) | 访客链接 | ✅(可选) | ❌(无账号体系) |
| 病毒扫描 | ✅ ClamAV / VirusTotal | ❌ | ❌ | ❌ | ❌ |
| Web 上传界面 | ❌(仅下载/删除) | ✅ | ✅ | ✅(可选) | ✅ |
(各项目能力口径取自其官方仓库 README 与本站对应文档,整理日期 2026-11-01。)
关键解读:transfer.sh 是唯一同时具备「多对象存储后端 + 上传认证 + 病毒扫描 + 服务端加密」的服务端,能力面在五者中最宽,代价是没有 Web 上传界面;若核心诉求是给非技术用户提供网页传文件,PsiTransfer/PicoShare 更合适;若需要浏览器端上传 + E2EE + 专用 CLI 的组合,Plik 是更对口的候选。
7.3 选型建议
- 服务器/脚本/CI 场景传文件 → transfer.sh(纯 curl、无依赖、限次限期头随用随给);
- 内网团队想给所有人一个网页上传入口 → PsiTransfer 或 PicoShare(Web 上传、零学习成本);
- 需要端到端加密与完整客户端体验 → Plik(专用 CLI + E2EE + 流式);
- 只想要一个极简的一次性文件投递点 → goploader(一次性下载、体量最小);
- 数据必须离开本机(云存储/去中心化) → transfer.sh(s3/gdrive/storj 四后端唯一可选)+ Plik(多后端)二选一。
八、参考链接
- GitHub 仓库:https://github.com/dutchcoders/transfer.sh (README、LICENSE,查询日期 2026-11-01)
- GitHub Releases:https://github.com/dutchcoders/transfer.sh/releases (版本与发布日期,查询日期 2026-11-01)
- GitHub Tags:https://github.com/dutchcoders/transfer.sh/tags (v1.6.1 打标日期 2023-12-04,查询日期 2026-11-01)
- 星数徽章:https://img.shields.io/github/stars/dutchcoders/transfer.sh.json (16k,查询日期 2026-11-01)
- 安全告警 issue:https://github.com/dutchcoders/transfer.sh/issues/670 (X-Forwarded-For 伪造绕过,README 横幅引用,查询日期 2026-11-01)
- 系列实测篇:《transfer.sh 1.6.1 Docker Compose 部署指南》、《transfer.sh 1.6.1 配置参数详解》、《transfer.sh 1.6.1 curl 上传下载命令详解》
- 同类组件文档:《PicoShare 介绍与选型指南》、《PsiTransfer 2.4.5 介绍与选型指南》、《Plik 介绍与选型指南》、《goploader 1.0.2 介绍与选型指南》