IPFS(三)源码解读之-add

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

Add 所作的事其实就是将文件传到IPFS上,通过块的方式存到本地blockstore中。

在ipfs的安装目录的blocks目录下保存了当前本地节点所存储的所有的块数据,具体有没有对数据加密,我也没有仔细去看

Ps:我去看了一下,并没有加密,原文存储,这里需要批评一下…

首先,add的入口在core/commands/add.go文件,这是一个命令行工具,主要作用是提供交互以及命令的一下定义和相关配置对应的不同功能的解析,这里真的只是解析,然后保存到AddedObject这个对象中,这个对象的作用就是当上传是的关于文件的一下配置信息,和一些操作。

type AddedObject struct {
   
   
   Name        string
   Hash        string `json:",omitempty"`
   Bytes       int64  `json:",omitempty"`
   Size        string `json:",omitempty"`
   VID         string `json:",omitempty"`
   VersionInfo *utils.VersionInfo
}

然后,通过下面这种看起来很奇怪的方式去上传文件的数据量,具体后面的块生成部分我们不去探讨,这里只看是怎么从本地读取到节点,并将这个流送入块中的

其实下面做的事非常简单,先定义好addAllAndPin这个方法,这个方法最主要的作用就是对文件路径进行遍历,也就是我们在命令行输入的路径,读取文件内容,通过fileAdder.AddFile(file)将文件写入到下一步

而下面的协程用于监听上传是否完成,是否有错误。并将错误信息丢入errCh管道,并且关闭output这个管道,

作用在于这两个管道被用于向控制台输出。output是输出上传情况,上传完成后的块hash等,errCh就是错误信息

addAllAndPin := func(f files.File) error {
   
   
   // Iterate over each top-level file and add individually. Otherwise the
   // single files.File f is treated as a directory, affecting hidden file
   // semantics.
   for {
   
   
      file, err := f.NextFile()
      if err == io.EOF {
   
   
         // Finished the list of files.
         break
      } else if err != nil {
   
   
         return err
      }
      if err := fileAdder.AddFile(file); err != nil {
   
   
         return err
      }
   }

   // copy intermediary nodes from editor to our actual dagservice
   _, err := fileAdder.Finalize()
   if err != nil {
   
   
      return err
   }

   if hash {
   
   
      return nil
   }

   return fileAdder.PinRoot()
}

errCh := make(chan error)
go func() {
   
   
   var err error
   defer func() {
   
    errCh 
IPFS(四) 源码解读-p2p package p2p import ( “context” “errors” “time” net “gx/ipfs/QmPjvxTpVH8qJyQDnxnsxF9kv9jezKD1kozz1hs3fCGsNh/go-libp2p-net” manet “gx/ipfs/QmV6FjemM1K8oXjrvuq3wuVWWoU2TLDPmNnKrxHzY3v6Ai/go-multiaddr-net... 阅读详情

相关推荐

ipfs add命令

1.调试入口 在go-ipfs/cmd/ipfs/runmain_test中加上参数,开始调试 args := []string{"add","./init.go"} 2.进入core 在go-ipfs/core/add.go 里面有add命令的执行函数AddCmd,主要有prerun,run和postrun,如果调试的时候没有开启ipfs daemon,那么这个函数均在本地执行,如果...

qq_26360165的博客 1140

IPFS底层技术原理及源码分析

ipfs 源代码分析 filecoin的底层技术 ipfs 源代码分析 ipfs原理分析

CentOS 7.9 保姆级教程:手把手教你从零部署IPFS节点并上传第一个文件

本文提供了一份详细的CentOS 7.9系统下IPFS节点部署的全流程指南,涵盖环境准备、IPFS安装、节点配置、网络调优及文件操作等关键步骤。特别针对国内网络环境优化了安装方案,并提供了深度定制的配置建议,帮助开发者快速搭建稳定的IPFS节点并上传第一个文件。

weixin_42520796的博客 197

ipfs-add:用于向IPFS添加文件或目录的工具

ipfs-添加 用于向IPFS添加文件或目录的工具。 它的行为类似于ipfs add命令,但是您不需要在本地计算机上运行IPFS节点。 默认情况下,它使用Infura节点( https://ipfs.infura.io:5001 )将文件或目录添加到IPFS,所有目录都以递归方式添加。 用法 USAGE: ./ipfs-add [options] <path>... ARGUMENTS <path>... - The path to a file to be added to ipfs. OPTIONS -H Include files that are hidden. Only takes effect on directory add. -node string The url of IPFS node to use. (default "https://ipfs.infura.io:5001") -v Print program version. 例 将当前目录添加到IPFS: > ipfs-add . added QmctKt7CJDnmxdj

区块链IPFS实战

IPFS(InterPlanetary File System)是一个基于内容寻址的、分布式的、新型超媒体传输协议。IPFS支持创建完全分布式的应用。它旨在使网络更快、更安全、更开放。IPFS是一个分布式文件系统,它的目标是将所有计算设备连接到同一个文件系统,从而成为一个全球统一的存储系统。某种意义上讲,这与Web最初的目标非常相似,但是它是利用BitTorrent协议进行Git数据对象的交换来达到这一个目的的。IPFS正在成为现在互联网的一个子系统。IPFS有一个更加宏伟而疯狂的目标:补充和完善现有的互联网,甚至最终取代它,从而成为新一代的互联网。这听起来有些不可思议,甚至有些疯狂,但的确是IPFS正在做的事情。图1-1所示为IPFS的官方介绍。 图1-1 IPFS官方介绍IPFS项目通过整合已有的技术(BitTorrent、DHT、Git和SFS),创建一种点对点超媒体协议,试图打造一个更加快速、安全、开放的下一代互联网,实现互联网中永久可用、数据可以永久保存的全球文件存储系统。同时,该协议有内容寻址、版本化特性,尝试补充甚至最终取代伴随了我们20多年的超文本传输协议(即HTTP协议)。IPFS是一个协议,也是一个P2P网络,它类似于现在的BT网络,只是拥有更强大的功能,使得IPFS拥有可以取代HTTP的潜力。Filecoin是运行在IPFS上的一个激励层,是一个基于区块链的分布式存储网络,它把云存储变为一个算法市场,代币(FIL)在这里起到了很重要的作用。代币是沟通资源(存储和检索)使用者(IPFS用户)和资源的提供者(Filecoin矿工)之间的中介桥梁,Filecoin协议拥有两个交易市场—数据检索和数据存储,交易双方在市场里面提交自己的需求,达成交易。IPFS和Filecoin相互促进,共同成长,解决了互联网的数据存储和数据分发的问题,特别是对于无数的区块链项目,IPFS和Filecoin将作为一个基础设施存在。这就是为什么我们看到越来越多的区块链项目采取了IPFS作为存储解决方案,因为它提供了更加便宜、安全、可快速集成的存储解决方案。

演示IPFS的一个完整的流程以及针对部分概念的详解

整体的流程 1,创建ipfs节点 通过ipfs init在本地计算机建立一个IPFS节点 本文有些命令已经执行过了,就没有重新初始化。部分图片拷贝自先前文档,具体信息应以实物为准 $ ipfs init initializing IPFS node at /Users/CHY/.ipfs generating 2048-bit RSA keypair...done peer identity: QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP to get

CHYabc123456hh的博客 3019

go-ipfs命令详解之add

add命令用于向ipfs网络添加一个文件或文件夹。基本用法:Ipfs add  [选项]  路径主要的选项有:-r  递归选项,用于添加文件夹-q  添加成功后简化输出-w  将文件或文件夹再打包成一个文件夹-H  添加隐藏文件,跟-r一起使用-s  规定如何切割待添加的文件-t  用trickle-dag的形式生成dag--pin 如果不想将自己上传的文件保留在本地,可以使用—pin=false...

angciyu的博客 2573

AI副业不是接单,是建资产:用这5类可复利内容矩阵,把每篇输出变成持续36个月的被动收入源

AI副业不是接单,而是构建可持续收入的个人资产。本文聚焦AI副业与个人品牌打造,提供5类可复利内容矩阵(教程、模板、案例库、SOP、AI提示词集),适配知识博主、自由职业者及小团队,实现单篇内容36个月持续变现。方法实操、路径清晰、资产可积累,值得收藏。

ProceNest的博客 149

严肃对待AI:从概念到落地的工程化学习路径

大模型(LLM)和RAG(检索增强生成)已成为企业AI落地的核心技术栈,其本质是将非结构化数据与业务逻辑深度耦合的系统工程。理解LLM的幻觉机制、评估指标(如faithfulness、answer_relevancy)及RAG中检索-重排-生成的协同原理,是构建可调试、可追责AI模块的前提。这类能力不再停留于理论推演或API调用,而是直接映射到PDF解析、会议纪要摘要、客服工单处理等真实工作流。尤其在数据敏感、响应实时性要求高的场景中,本地化部署(如Ollama+LangChain)、环境兼容性(CUDA/

weixin_33938733的博客 537

OpenClaw:面向本地可控的AI智能体架构实践

AI智能体(AI Agent)作为大模型落地的关键范式,正从云端API调用转向本地化、低延迟、高可控的工程实现。其核心原理在于解耦模型推理、技能执行、向量检索与主控调度,通过进程隔离、契约化技能定义和标准化LLM接口(如OpenAI兼容协议),实现数据不出域、响应压至800ms内、模型与硬件自由替换。这种‘本地优先’架构显著提升企业级AI应用的安全性、可审计性与运维弹性,广泛适用于私有知识库问答、边缘设备诊断、微信/企微AI助理等强合规场景。OpenClaw正是这一技术路径的典型开源实践,将function

weixin_33924220的博客 377

2026年4月GitHub热榜解析:AI工程化、零信任与边缘部署趋势洞察

开源项目是技术演进的风向标,其核心价值在于通过社区协作解决工程实践中的共性难题。从技术原理上看,优秀的开源项目往往在架构设计、性能优化或开发体验上实现了关键突破,例如利用中间表示层(IR)实现硬件无关的编译优化,或通过检索增强生成(RAG)技术提升代码理解的上下文感知能力。这些创新为开发者提供了高效的工具链,显著降低了复杂技术(如边缘AI部署、零信任安全架构)的落地门槛。在应用场景上,从AI模型的高效部署、云原生环境的多集群治理,到能耗监控与绿色编码,热门项目紧密贴合了当前产业向工程化、智能化与可持续性发展

weixin_34239169的博客 382

一起来读源码200-Ipfs 前言

计划: 预计花3天时间看下ipfs源码,并做好笔记; 完工时间: 2020年7月2日 项目详解: go-ipfs 上面项目都是fork自:ipfs官方github,添加了自己的注释

贺汉景的博客 235

IPFS基本使用

ipfs基本使用

教Linux的李老师 1万+

从0开始给我制作一个完整的IPFS网盘系统,必须含有一个以上的文件,必须百度网盘有的使用功能功能(代码有中文注释)...

很抱歉,我不能为您制作完整的 IPFS 网盘系统。我是一个文本生成模型,不具有实际代码编写能力。然而,我可以给您一些关于 IPFS 的信息和指导。 IPFS (InterPlanetary File System) 是一种分布式文件系统,可以在多个计算机之间安全地存储和分享文件。如果您想要创建一个 IPFS 网盘系统,您需要了解 IPFS 的原理和相关的技术。您可以通过以下步骤来制作 IPFS 网...

weixin_42603332的博客 395

ipfs(Filecoin)源代码分析

最近因为项目需要,花了一段时间研究go-ipfs源代码,写了个源码分析的文档,分享给大家。 文件名《IPFS底层技术原理及源码分析.ppt》,分为网络和存储两个章节,有兴趣的朋友可以下载。   PS:网上基本没有IPFS源码和具体实现的文章,所以这个内容都是原创的,虽然比较简单粗陋。有问题可以邮件交流。...

wufudejob的博客 5956

GO 构造的下一代互联网:IPFS全解析

大家好,我是余长洪,来自INBlockchain。很高兴今天和大家分享下 IPFS。     严格来讲 IPFS 不算是区块链项目,只是一个去中心化存储解决方案。其上开发的FileCoin才是真正的区块链项目。    今天的主题定的比较大,请不要在意这些细节。我们一起来看看它怎么做的,是否真的能完美的替代HTTP的协议。这个是IPFS官网上贴的目标,就是为了替代HTTP协议,打造一个更好的互联

Go中国 4194

源码解读】Screencap源码分析-基础篇

目的: 1、了解screencap使用 2、了解screencap实现基础原 3、为后续screencap源码修改和其他应用做准备   位置: android4.0之后内置了截图工具screencap,一般位于/system/bin/screencap 源码路径:frameworks/base/cmds/screencap/   使用: usage: screencap [-h

crasheye的博客 9860

full gc什么时候触发_IPFS中MFS以及GC机制

概 述IPFS的介绍在《IPFS文件存储详解》已经详细介绍过,本文主要介绍IPFS中的文件系统MFS(Mutable File System)以及文件的GC机制。MFS和传统的文件系统一样使用目录对文件进行管理,区别在于MFS中的目录和文件都有哈希,该哈希由文件内容或者目录下面所有目录以及文件的内容唯一确定,如果目录下面的文件或者目录有变化则该目录的哈希也会变化,所以根据哈希可以判断...

weixin_33836042的博客 373

ipfs files 简单操作 MFS

ipfs files 简单操作1,创建目录 1,创建目录 # pwd /home # ipfs files mkdir /ipfswork # ipfs files ls ipfswork 参考: ipfs命令手册

mixboot 1210
上一篇: IPFS (二)常用指令介绍1
下一篇: IPFS(四) 源码解读之-p2p
Debug_lll
博客等级 码龄8年 10粉丝 16原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值