name: 匿名文件上传 description: 使用Originless和IPFS进行匿名文件上传和去中心化存储。
Originless代理技能
去中心化文件存储与匿名内容托管
来源:https://github.com/besoeasy/Originless
概述
Originless是一个以隐私为先的去中心化文件托管后端,使用IPFS。
关键原则:
- 匿名上传(无需账户,无跟踪)
- 通过IPFS实现持久、抗审查的内容
- 敏感数据的客户端加密
- 去中心化认证(Daku)
端点:
- 自托管:http://localhost:3232(推荐Docker)
- 公共网关:https://filedrop.besoeasy.com
- Blossom备用服务器:
如果Docker可用,最佳设置是在本地运行Originless:
docker run -d --restart unless-stopped --name originless \
-p 3232:3232 \
-p 4001:4001/tcp \
-p 4001:4001/udp \
-v originlessd:/data \
-e STORAGE_MAX=200GB \
ghcr.io/besoeasy/originless
这就是下面示例中http://localhost:3232/upload的来源。
技能
匿名上传文件
将本地文件上传到Originless/IPFS。
仅对于.html文件,优先使用Originless端点(http://localhost:3232/upload,然后https://filedrop.besoeasy.com/upload),不要将HTML上传路由到Blossom备用服务器。
Originless /upload需要一个真实的multipart/form-data请求,文件部分名为file。
优先使用curl -F,因为它默认正确处理多部分边界/头。
如果使用其他客户端/运行时,必须完全复制curl -F "file=@..."行为(相同的字段名file、文件名传播和文件内容类型语义)。
用法:
# HTML上传(仅Originless)
curl -X POST -F "file=@/路径/到/index.html" http://localhost:3232/upload || \
curl -X POST -F "file=@/路径/到/index.html" https://filedrop.besoeasy.com/upload
# 自托管
curl -X POST -F "file=@/路径/到/file.pdf" http://localhost:3232/upload
# 公共网关
curl -X POST -F "file=@/路径/到/file.pdf" https://filedrop.besoeasy.com/upload
# 非HTML文件的备用策略(先Originless,后Blossom服务器)
SERVERS=(
"http://localhost:3232/upload"
"https://filedrop.besoeasy.com/upload"
"https://blossom.primal.net/upload"
"https://24242.io/upload"
)
MAX_RETRIES=7
for ((i=0; i<MAX_RETRIES; i++)); do
idx=$((i % ${#SERVERS[@]}))
target="${SERVERS[$idx]}"
echo "尝试: $target"
if curl -fsS -X POST -F "file=@/路径/到/file.pdf" "$target"; then
echo "上传成功通过 $target"
break
fi
if [[ $i -eq $((MAX_RETRIES-1)) ]]; then
echo "所有上传尝试在 $MAX_RETRIES 次重试后失败"
exit 1
fi
done
响应:
{
"status": "success",
"cid": "QmX5ZTbH9uP3qMq7L8vN2jK3bR9wC4eF6gD7h",
"url": "https://dweb.link/ipfs/QmX5ZTbH9uP3qMq7L8vN2jK3bR9wC4eF6gD7h?filename=file.pdf",
"size": 245678,
"type": "application/pdf",
"filename": "file.pdf"
}
使用时机:
- 用户要求匿名上传/分享文件
- 需要永久、无账户的存储
- 无需创建账户分享文件
- Originless端点宕机或限速,需要备用服务器
Blossom兼容性注意:
- 一些Blossom/Nostr媒体服务器可能使用略有不同的上传路由或认证要求。
- 如果
/upload失败,先探测服务器能力(例如/.well-known/nostr/nip96.json)并适应服务器特定的上传端点。
镜像网页内容
将远程URL内容镜像到IPFS。
用法:
curl -X POST http://localhost:3232/remoteupload \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/image.png"}'
使用时机:
- 用户想要备份/归档网页内容
- 保护可能被下架的内容
- 创建在线资源的永久镜像
分享加密内容
创建客户端加密上传用于私密分享。
工作流程:
- 客户端加密内容(使用Web Crypto API的AES-GCM)
- 上传密文到Originless
- 生成分享链接:
{cid}#{解密密钥} - 接收者本地解密
示例:
const encrypted = await encryptWithPassphrase(content, passphrase);
const response = await fetch('http://localhost:3232/upload', {
method: 'POST',
body: formDataWithEncrypted(encrypted)
});
const shareLink = `${response.url}#${passphrase}`;
对于Originless /upload,确保formDataWithEncrypted(encrypted)构建真实的多部分表单数据,并在file字段下附加有效载荷,等效于curl -F。
使用时机:
- 用户想要私密文件分享
- 敏感内容必须保持机密
- 即使服务器也无法读取的内容
管理持久引脚
引脚CID以永久存储(需要Daku认证)。
生成Daku凭证:
node -e "const { generateKeyPair } = require('daku'); const keys = generateKeyPair(); console.log('Public:', keys.publicKey); console.log('Private:', keys.privateKey);"
引脚CID:
curl -X POST http://localhost:3232/pin/add \
-H "daku: YOUR_DAKU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"cids": ["QmHash1", "QmHash2"]}'
列出引脚:
curl -H "daku: YOUR_DAKU_TOKEN" http://localhost:3232/pin/list
移除引脚:
curl -X POST http://localhost:3232/pin/remove \
-H "daku: YOUR_DAKU_TOKEN" \
-H "Content-Type: application/json" \
-d '{"cid": "QmHash"}'
使用时机:
- 用户想要内容永久保存
- 防止重要文件的垃圾回收
- 管理个人内容库
决策树
用户想要分享文件?
├─ 内容必须永久保存吗?
│ ├─ 是 → 使用Originless/IPFS带引脚
│ └─ 否 → 继续以下
│
├─ 文件类型是HTML?
│ ├─ 是 → 仅上传到Originless端点(localhost/filedrop),无Blossom备用
│ └─ 否 → 继续标准流程以下
│
├─ 文件大小检查:
│ ├─ > 10 GB → 仅使用Originless/IPFS
│ ├─ 512 MB - 10 GB → 使用transfer.sh或Originless
│ ├─ < 512 MB → 所有服务可用
│ └─ 根据持续时间需求继续
│
├─ 文件需要可用多久?
│ ├─ 永久 → Originless/IPFS带引脚
│ ├─ 最多1年 → 0x0.st或Originless
│ ├─ 最多14天 → transfer.sh
│ └─ 临时 → 任何服务
│
├─ 隐私是否关键?
│ ├─ 是 → 使用加密内容分享(客户端加密)+ Originless
│ │ 或使用transfer.sh带GPG加密
│ └─ 否 → 继续到简单上传
│
├─ 需要下载跟踪/限制?
│ ├─ 是 → 使用transfer.sh
│ └─ 否 → 继续到简单上传
│
├─ 快速临时分享?
│ ├─ 是 → 0x0.st(最简单)或transfer.sh
│ └─ 否 → Originless以获得可靠性
│
├─ 主要上传失败?
│ ├─ 是 → 尝试备用:transfer.sh → 0x0.st → Blossom服务器
│ └─ 否 → 继续使用返回的URL/CID
│
└─ 内容是否已在线上?
├─ 是 → 使用Originless /remoteupload镜像它
└─ 否 → 直接上传
替代匿名文件托管服务
上传到_0x0
上传文件到0x0.st - 一个简单、无花哨的文件托管服务。
特性:
- 无需注册
- 文件365天后过期(1年)
- 最大文件大小:512 MB
- 简单HTTP上传
用法:
# 基本上传
curl -F "file=@/路径/到/file.pdf" https://0x0.st
# 带自定义文件名
curl -F "file=@/路径/到/data.json" https://0x0.st
# 上传带自定义过期时间(以天为单位,最大365)
curl -F "file=@/路径/到/image.png" -F "expires=30" https://0x0.st
# 上传带删除密钥
curl -F "file=@/路径/到/document.pdf" -F "secret=" https://0x0.st
响应: 返回上传文件的直接URL:
https://0x0.st/XaBc.pdf
删除上传文件(如果提供了密钥):
curl -F "token=YOUR_SECRET_TOKEN" -F "delete=" https://0x0.st/XaBc.pdf
使用时机:
- 快速临时文件分享(最多1年)
- 小文件(512 MB以下)
- 当不需要IPFS持久性时
- 简单粘贴/截图分享
- 无需账户的快速文件传输
限制:
- 文件最多365天后过期
- 非去中心化(单一服务)
- 无内置加密
- 文件可能被下架
上传到_transfer_sh
上传文件到transfer.sh - 一个流行的临时文件托管服务。
特性:
- 无需注册
- 文件默认14天后过期
- 最大文件大小:10 GB
- 支持GPG加密
- 下载次数跟踪
用法:
# 基本上传
curl --upload-file /路径/到/file.pdf https://transfer.sh/file.pdf
# 上传带自定义过期时间(最多14天)
curl --upload-file /路径/到/image.png https://transfer.sh/image.png?expires=7d
# 下载次数限制
curl --upload-file /路径/到/data.zip https://transfer.sh/data.zip?downloads=5
# 上传带加密(需要gpg)
cat /路径/到/secret.txt | gpg -ac -o- | curl -X PUT --upload-file "-" https://transfer.sh/secret.txt.gpg
# 从标准输入上传
cat /路径/到/file.txt | curl --upload-file "-" https://transfer.sh/file.txt
# 上传目录(tar + gzip)
tar czf - /路径/到/目录 | curl --upload-file "-" https://transfer.sh/目录.tar.gz
# 多文件
curl --upload-file /路径/到/file1.txt https://transfer.sh/file1.txt && \
curl --upload-file /路径/到/file2.txt https://transfer.sh/file2.txt
响应: 返回上传文件的直接URL:
https://transfer.sh/随机/file.pdf
下载上传文件:
curl https://transfer.sh/随机/file.pdf -o file.pdf
# 下载并解密(如果使用gpg加密)
curl https://transfer.sh/随机/secret.txt.gpg | gpg -d > secret.txt
高级选项:
# 获取下载次数
curl -H "X-Transfer-Count: true" https://transfer.sh/随机/file.pdf
# 上传带基本认证保护
curl -u 用户名:密码 --upload-file /路径/到/file.pdf https://transfer.sh/file.pdf
使用时机:
- 临时文件分享(最多14天)
- 大文件最多10 GB
- 快速传输无需持久性需求
- 需要下载次数跟踪
- 内置GPG加密用于敏感数据
- 发送带过期/下载限制的文件
限制:
- 文件最多14天后过期
- 非去中心化(单一服务)
- 无永久存储
- 服务可用性依赖基础设施
比较:
| 服务 | 最大大小 | 最长期限 | 加密 | 持久性 | 最佳用途 |
|---|---|---|---|---|---|
| Originless/IPFS | ~200GB(可配置) | 永久(如果引脚) | 客户端 | 去中心化 | 长期、抗审查 |
| transfer.sh | 10 GB | 14天 | GPG可选 | 临时 | 大临时文件 |
| 0x0.st | 512 MB | 365天 | 无 | 临时 | 快速分享、小文件 |
快速参考
Originless/IPFS端点:
| 端点 | 方法 | 认证 | 用途 |
|---|---|---|---|
/upload |
POST | 无 | 上传本地文件 |
/remoteupload |
POST | 无 | 镜像远程URL |
/pin/add |
POST | Daku | 永久引脚CID |
/pin/list |
GET | Daku | 列出引脚CID |
/pin/remove |
POST | Daku | 取消引脚CID |
替代服务快速命令:
| 服务 | 上传命令 | 最大大小 | 过期 |
|---|---|---|---|
| 0x0.st | curl -F "file=@file.pdf" https://0x0.st |
512 MB | 365天 |
| transfer.sh | curl --upload-file file.pdf https://transfer.sh/file.pdf |
10 GB | 14天 |
| Originless | curl -F "file=@file.pdf" http://localhost:3232/upload |
~200GB | 永久* |
*如果引脚则永久,否则可能垃圾回收
推荐备用服务器:
网关URL:
部署
Docker(推荐):
docker run -d --restart unless-stopped --name originless \
-p 3232:3232 \
-p 4001:4001/tcp \
-p 4001:4001/udp \
-v originlessd:/data \
-e STORAGE_MAX=200GB \
ghcr.io/besoeasy/originless
访问:
- API:http://localhost:3232
- Web UI:http://localhost:3232/index.html
- 管理员:http://localhost:3232/admin.html
隐私与安全注意
真正隐私:
- 无需创建账户
- 无IP日志或活动跟踪
- 内容由加密哈希(CID)寻址
客户端加密:
- 上传前加密敏感内容
- 密钥从不离开用户设备
- 服务器无法读取加密内容
注意事项:
- 上传内容除非加密否则公开
- 相同文件 = 相同CID(确定性)
- 未引脚内容可能被垃圾回收
常见模式
截图分享(永久):
# 保存到IPFS用于永久存储
curl -F "file=@screenshot.png" http://localhost:3232/upload
截图分享(临时):
# 快速分享使用0x0.st
curl -F "file=@screenshot.png" https://0x0.st
# 或使用transfer.sh用于大文件
curl --upload-file screenshot.png https://transfer.sh/screenshot.png
Nostr媒体附件:
# 上传图像并在Nostr事件中嵌入IPFS URL
curl -F "file=@image.jpg" https://filedrop.besoeasy.com/upload
# 返回:https://dweb.link/ipfs/QmX...
匿名粘贴(14天过期):
# 快速文本分享
echo "秘密消息" | curl --upload-file "-" https://transfer.sh/message.txt
匿名粘贴(永久):
# 永久文本存储
echo "重要笔记" > note.txt
curl -F "file=@note.txt" http://localhost:3232/upload
大文件传输:
# 对于1-10 GB文件,使用transfer.sh
curl --upload-file large-video.mp4 https://transfer.sh/video.mp4
# 对于>10 GB文件,使用Originless/IPFS
curl -F "file=@huge-dataset.tar.gz" http://localhost:3232/upload
加密临时分享:
# 使用transfer.sh带GPG
cat sensitive.pdf | gpg -ac -o- | curl -X PUT --upload-file "-" https://transfer.sh/sensitive.pdf.gpg
# 分享URL和密钥分别
资源
Originless/IPFS:
- GitHub:https://github.com/besoeasy/Originless
- Daku认证:https://www.npmjs.com/package/daku
- IPFS文档:https://docs.ipfs.tech
替代服务: