IPFS分享文件简易教程

实用技术ipfscrust分享技巧
浏览数 - 288发布于 - 2025-10-04 - 18:50

重新编辑于 - 2025-10-04 - 18:53

最近在补档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 和文件名,

text
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/自行修改

text
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搓的上传脚本

Python
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

text
@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 ipfs3.jpg 方法2:这步可以不需要,crust的注册参考 无法被举报的文件分享神器CRUST IPFS操作指南 PART.I| 茶馆 - 南+ South Plus - powered by Pu!mdHd

python
#!/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使用更佳,这类网盘站我建议是使用本地网关,走服务器流量,比公共网关稳定 ipfs1.jpg

ipfs2.jpg

本文版权遵循 CC BY-NC 协议 本站版权政策

2 条回复

茅羽耶
发布于 2025-10-04 - 19:33

大佬带带

在绅士仓库看到过ipfs,也花了很长时间去尝试使用。 

总的来说问题很多。  

  • ipfs的客户端非常难用(ipfs desktop)。不仅如此,ipfs没有提供安卓客户端。难用的点在哪我都不想列举,用过肯定都知道。  

    由于以上原因,如果想要获得稍微好一点的体验,必须自己开发一个客户端进行定制。ipfs过于冷门,目前广受使用的第三方客户端基本不存在(有一些冷门的,就比如层林尽染的)。  

  • ipfs本机节点用处很小。ipfs的节点发现是直接依赖于DHT的,而这个功能在BT中只是一种辅助手段,主要还是依赖于tracker。DHT的发现效率过于低下,而且还存在断连的情况(不知道是客户端还是DHT问题)。也就是说你发布了资源,别人都不一定下得到,因为不一定能发现你这个节点。

    因此考虑到本机不能用,只能使用托管平台,我试了几家,Pinata的效果是比较好的,差不多就是当网盘用。但是容量特别小,免费1GB存储空间。  

  • 去中心化这种思想本身就会导致很多问题,现在的最有效功能是反和谐,除此之外缺点很多。  

    去中心化的网关 => 导致分享链接分裂,大家分享资源可能使用完全不同的链接格式。只提供cid就更不妥了,因为不够方便。网关可能被神秘大手gank,而下载速度可观的网关其实并没有想象中那么多,因为网关需要承接大量的上传流量,这是一笔巨大的开销。  

还有很重要的一点,下载也不够方便,ipfs的下载几乎就是用浏览器原生的下载器。连基础的多选功能都没有。  

  • 这是一个测试文本1

  • 这是一个测试文本2

评论

fylcr
fylcr评论茅羽耶

storacha.network lighthouse.storage apillon.io filebase.com

2025-10-04 - 22:04
fylcr
发布于 2025-10-04 - 22:05

没有想到半年后还能看见其他人用crust存文件的

(。>︿<。) 已经一滴回复都不剩了哦~