最近在补档gal汉化合集,把隔壁IPFS相关的贴看了个遍,也算是入门了 虽说crust network不稳定,但我寻思cru币价不归0多少还是能用的( 简单说明下:ipfs下载链接分为两个部分,网关+CID,CID 是文件内容的唯一编号,网关负责把它转换成可访问的网页链接。存储在服务商的是 CID。 IPFS 类似 BT,需要有人做种才能下载,托管平台能代替你长期做种,本文就是将文件托管(上链) 到 Crust 平台,且使用官方pinner 服务器下单,不需要买cru币
1.安装 IPFS 并生成 CID
首先安装ipfs,这里就不赘述了,直接参考
GitHub - cenglin123/IPFS-tutorial: IPFS 分享资源快速上手及其适用场景浅议
导入本地生成CID 和文件名,
IPFS_PATH="D:/.ipfs" ipfs add -r --cid-version=1 --pin "D:\要上传的目录" | awk '/added/ {print $2 " " substr($0,index($0,$3))}' > files.txt
之后放入excel进行分列处理,生成<文件名> <文件大小>,接下来会用到
2.将文件临时上传到公共网关
将文件上传到公共网关临时储存,运行python脚本上传
RPC API 地址目前有三个可以用,参考https://crust-v6-navy.ipns.gateway.v2ex.pro/自行修改
RPC_URL = "https://gw.crustfiles.net/api/v0/add?pin=true&cid-version=1&raw-leaves=true"
RPC_URL = "https://ipfs-gw.decloud.foundation/api/v0/add?pin=true&cid-version=1&raw-leaves=true"
RPC_URL = "https://crustipfs.xyz/api/v0/add?pin=true&cid-version=1&raw-leaves=true"
用gpt搓的上传脚本
import os
import json
import subprocess
import time
# ---------------- 配置 ----------------
API_KEY = "ZXRoLTB4N2I3NTM3NmEyMjBmMGU1OWIzZWM4ZWY3ZmJlMjgwYjBiY2ZiNThjMzoweGY4NDM1MDc1YjRhNTM0MTNmMDAwYTA1NGYwNzkzZTBkNjhkODMzZTU5YjlhZWIxOTQ2MjE5YzVkZmU1ZDA1NjQwOGRmOTI4ZjFjMjk1ODZkNmFkODRhMGFhZWFlMzJkOTU3YzcxNGUyYWE0OTg4MzAwMDRkOWYzM2RlN2NhMmY0MWM="
RPC_URL = "https://gw.crustfiles.net/api/v0/add?pin=true&cid-version=1&raw-leaves=true"
UPLOAD_DIR = r"D:\新建文件夹" # 要上传的目录
RESULT_JSON = "upload_results.json"
MAX_RETRIES = 3 # 每个文件失败重试次数
RETRY_DELAY = 10 # 失败后延迟(秒)
# -------------------------------------
def upload_file(file_path):
"""用 curl 上传单个文件,成功返回 CID,失败返回 None"""
for attempt in range(1, MAX_RETRIES + 1):
print(f"[尝试 {attempt}] 上传: {file_path}")
cmd = [
"curl", "-s", "-X", "POST",
"-H", f"Authorization: Basic {API_KEY}",
"-F", f"file=@{file_path}",
RPC_URL
]
result = subprocess.run(cmd, capture_output=True)
stdout = result.stdout.decode("utf-8", errors="ignore").strip()
stderr = result.stderr.decode("utf-8", errors="ignore").strip()
if result.returncode != 0:
print(f" ❌ curl 错误: {stderr}")
time.sleep(RETRY_DELAY)
continue
try:
data = json.loads(stdout)
cid = data.get("Hash")
if cid:
print(f" ✅ 成功: CID={cid}")
return cid
else:
print(f" ❌ 返回无 Hash: {stdout}")
except Exception as e:
print(f" ❌ JSON 解析失败: {e} -> {stdout}")
time.sleep(RETRY_DELAY)
return None
def find_all_files(directory):
"""递归扫描目录下所有文件"""
files = []
for root, _, filenames in os.walk(directory):
for name in filenames:
files.append(os.path.join(root, name))
return files
def main():
file_list = find_all_files(UPLOAD_DIR)
print(f"发现 {len(file_list)} 个文件,开始上传...")
filenames = []
cids = []
for file_path in file_list:
filenames.append(os.path.basename(file_path)) # 只保存文件名
if not os.path.exists(file_path):
print(f"⚠️ 文件不存在: {file_path}")
cids.append(None)
continue
cid = upload_file(file_path)
cids.append(cid)
# 保存为两个数组的 JSON
output = {
"files": filenames,
"cids": cids
}
with open(RESULT_JSON, "w", encoding="utf-8") as f:
json.dump(output, f, ensure_ascii=False, indent=2)
print(f"\n✅ 全部完成,结果已保存到 {RESULT_JSON}")
if __name__ == "__main__":
main()
3.使用 Crust 官方 pinner 下单固定文件
步骤2只是临时上传,但是不会帮你下订单固定到crust,所以这时候就到大佬的下单工具:
https://github.com/ImoutoHeaven/scripts-examples/tree/main/crustfiles-pinner-simulator 使用官方pinner服务器上链,因为是临时的,一定要和步骤2同时进行,不要等全传完再下单会失效,建议运行一个循环脚本,我这里用的bat
个人测试单文件5g以内都会接单,用步骤1生成的<文件名> <文件大小> 粘贴到files.txt然后运行bat,crust是保存6个月,可以通过重新下单续订,所以我们只要在后台一直运行这个脚本就行(前提是官方pinner服务器没崩 试过了上传到网关后用脚本下单秒接,用自己机子的话因为有多个副本所以会上传流量比实际多好几倍,而且还得一直挂后台 auth token生成参考个人备忘1 - Crust/IPFS远程固定和批量上传,以及远程做种的方法| 茶馆 - 南+ South Plus - powered by Pu!mdHd 也可以直接用我给的token
@echo off
:loop
python crust_pinner.py --auth "ZXRoLTB4N2I3NTM3NmEyMjBmMGU1OWIzZWM4ZWY3ZmJlMjgwYjBiY2ZiNThjMzoweGY4NDM1MDc1YjRhNTM0MTNmMDAwYTA1NGYwNzkzZTBkNjhkODMzZTU5YjlhZWIxOTQ2MjE5YzVkZmU1ZDA1NjQwOGRmOTI4ZjFjMjk1ODZkNmFkODRhMGFhZWFlMzJkOTU3YzcxNGUyYWE0OTg4MzAwMDRkOWYzM2RlN2NhMmY0MWM=" --input files.txt
echo
timeout /t 3600 /nobreak >nul
goto loop
4查看cid上链情况
方法1:https://github.com/ImoutoHeaven/crust-order-status参考项目README.md
方法2:这步可以不需要,crust的注册参考
无法被举报的文件分享神器CRUST IPFS操作指南 PART.I| 茶馆 - 南+ South Plus - powered by Pu!mdHd
#!/usr/bin/env python3
import json
import sys
from pathlib import Path
def main():
print("请输入 CID(每行一个,输入完成后按 Ctrl+D 结束):")
# 从标准输入读取所有 CID
cids = [line.strip() for line in sys.stdin if line.strip()]
if not cids:
print("没有输入任何 CID!")
return
# 构建 JSON 列表
out_list = [{"fileCid": cid, "fileName": "-"} for cid in cids]
# 输出文件名(你可以改成别的)
out_file = Path("cids.json")
# 写入 JSON 文件
out_file.write_text(json.dumps(out_list, indent=2, ensure_ascii=False), encoding="utf-8")
print(f"已生成 {out_file.resolve()},共 {len(cids)} 条记录。")
if __name__ == "__main__":
main()
git运行输入要查询的cid按Ctrl+Z+Enter生成cid_json文件,然后在crust导入
利用ipfs分享助手导入ipfswebui,配合openlist/alist使用更佳,这类网盘站我建议是使用本地网关,走服务器流量,比公共网关稳定