匿名文件上传与去中心化存储技能Skill anonymous-file-upload

这个技能用于匿名上传文件到去中心化存储网络如IPFS,提供持久的、抗审查的内容托管,支持客户端加密以保护隐私。适用于需要匿名分享、永久存储或隐私保护的文件上传场景。关键词:匿名文件上传、去中心化存储、IPFS、隐私保护、客户端加密、持久化存储。

Web3 0 次安装 0 次浏览 更新于 3/22/2026

name: 匿名文件上传 description: 使用Originless和IPFS进行匿名文件上传和去中心化存储。

Originless代理技能

去中心化文件存储与匿名内容托管

来源:https://github.com/besoeasy/Originless

概述

Originless是一个以隐私为先的去中心化文件托管后端,使用IPFS。

关键原则:

  • 匿名上传(无需账户,无跟踪)
  • 通过IPFS实现持久、抗审查的内容
  • 敏感数据的客户端加密
  • 去中心化认证(Daku)

端点:

如果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"}'

使用时机:

  • 用户想要备份/归档网页内容
  • 保护可能被下架的内容
  • 创建在线资源的永久镜像

分享加密内容

创建客户端加密上传用于私密分享。

工作流程:

  1. 客户端加密内容(使用Web Crypto API的AES-GCM)
  2. 上传密文到Originless
  3. 生成分享链接:{cid}#{解密密钥}
  4. 接收者本地解密

示例:

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

访问:


隐私与安全注意

真正隐私:

  • 无需创建账户
  • 无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:

替代服务: