使用IPFS作为Java项目的文件系统


1. 项目中引入java-ipfs-http-client

编辑pom.xml文件,加入以下内容

<!--JitPack Git包管理-->
<repositories>  <repository><id>jitpack.io</id><url>https://jitpack.io</url></repository>
</repositories><!--ipfs客户端-->
<dependencies><dependency><groupId>com.github.ipfs</groupId><artifactId>java-ipfs-http-client</artifactId><version>1.3.3</version></dependency>
</dependencies>

java-ipfs-http-client包括四个依赖项:

  • multibase: 编码标准

  • multiaddr: 文件或端口的地址

  • multihash: 哈系,可根据编码标准转换

  • cidmultihash的扩展,文件内容id


2. 实例化IPFS

使用new IPFS()方法创建IPFS实例:

//输入IP与端口,可选api版本、限时与ssl协议开关
IPFS ipfs = new IPFS(String host, int port, (可空)String version, (可空)int connectTimeoutMillis, (可空)int readTimeoutMillis, (可空)boolean ssl);or//输入整个地址
MultiAddress multiaddr = new MultiAddress("http://*.*.*.*:*");
IPFS ipfs = new IPFS(multiaddr);

3. 上传文件到IFPS

ipfs-http-client支持文件、字节与输入流上传,可选单个或多个文件:

NamedStreamable file = new NamedStreamable.FileWrapper(File source)
NamedStreamable file = new NamedStreamable.ByteArrayWrapper((可空)String name, byte[] data)
NamedStreamable file = new NamedStreamable.InputStreamWrapper((可空)String name, InputStream data);List<MerkleNode> results = ipfs.add(file)
List<MerkleNode> results = ipfs.add(List<NamedStreamable> files);

返回值MerkelNode为IPFS网络执行文件上传后的结果,类似区块链的出块,其结构为:

class MerkleNode {public final Multihash hash;public final Optional<String> name;public final Optional<Integer> size;public final Optional<String> largeSize;public final Optional<Integer> type;public final List<MerkleNode> links;public final Optional<byte[]> data;
}

作为文件系统的标识,hash字段应在数据表中保存,用于在之后进行文件获取或查询:

String hash = results.iterator().next().hash.toBase58();

4. 从IPFS中读取文件

通过之前保存的hash,可获取整个文件或文件在IPFS网络中的信息:

Multihash multihash = Multihash.fromBase58(hash);//打印文件内容
byte[] data = ipfs.cat(multihash);
InputStream data = ipfs.catStream(multihash);//下载文件
byte[] data = ipfs.get(multihash);//查看文件信息
List<MerkleNode> nodes = ipfs.ls(multihash);

如果用户终端不支持ipfs网关,也可以考虑直接调用后端程序获取文件内容。

另外ipfs-http-client支持整个目录的上传与查询,其功能有待发掘。

使用IPFS作为Java项目的文件系统相关推荐

  1. 将已有项目转为se项目_如何将 Java 项目转换成 Maven 项目

    本文内容 Java 项目 Maven 项目 Java 项目转换成 Maven 项目 本文主要介绍如何将 Java 项目转换成 Maven 项目.首先要明确的是,用 Maven 管理 Java 项目的确 ...

  2. 立足GitHub学编程:13个不容错过的Java项目

    今天我们将整理一大波干货满满的优秀Java项目. GitHub可谓一座程序开发的大宝库,有些项目值得fork,有些则能帮助我们改进自有代码或者学习编程技能.无论如何,开发工作当中我们几乎不可能绕得开G ...

  3. 用gradle启动java项目_构建Java项目

    #构建Java项目# 上一节我们简要介绍了如何编写一个单机的To Do应用,接下来要打包部署成可执行的应用,我们需要编译源代码,生成的class文件需要打包到JAR文件中.JDK提供了javac 和j ...

  4. Java项目架构演进和SpringCloud总结

    Java项目架构演进过程和SpirngCloud知识总结: 技术梳理 开发技术栈以SpringCloud为主,单个微服务模块以SpringMVC+SpringBoot/Spring+MyBatis组合 ...

  5. java服务器项目,java项目服务器部署

    java项目服务器部署 内容精选 换一换 硬件要求如表1所示.操作系统要求如表2所示.如果是全新安装操作系统,可选择"Minimal Install"安装方式并勾选Developm ...

  6. java lib 不在构建路径里面问题_svn - Eclipse“这个编译单元不在java项目的构建路径上”...

    svn - Eclipse"这个编译单元不在java项目的构建路径上" 我无法在Eclipse上使用自动完成功能. 我正在研究svn上的项目. 我通过进入Eclipse在Eclip ...

  7. k8s实战之手动部署PHP项目和Java项目

    微信公众号:运维开发故事,作者:double冬 对k8s刚入门的朋友而言,光搭建k8s集群是不够的,我们需要更多的理论加实战,才能更好的掌握k8s的好处,当我们成功部署一个k8s集群之后,我们需要在实 ...

  8. JSD-2204-续 配置中心-Nginx-Linux部署java项目-Day19

    1.续 配置中心 上次课我们完成了cart模块的数据库配置信息添加到nacos的操作 我们也删除了cart模块原有的连接数据库信息的配置 下面开始,我们尝试连接nacos配置中心,读取数据库配置信息, ...

  9. 【Java项目】好客租房——前台后台系统

    前置知识:ReactJS AntdesignPro搭建后台信息管理系统 Semantic-UI前台 nodejs模拟前台后端,用于前后端分离开发 后端提供mock数据 AntDesignPro应用 1 ...

最新文章

  1. CentOS 5 安装as86汇编器
  2. 在HANA里设置后台Job
  3. 北斗导航 | Select Satellite 选星算法
  4. ---WebCam网络摄像头6 编译WebCam
  5. Java3y文章目录导航
  6. PHP: 手把手编写自己的 MVC 框架实例教程
  7. Stack Overflow引入CROKAGE,搜问题不用再东拼西凑
  8. ssl1063-统计数字【哈希表】
  9. redis将散裂中某个值自增_这些Redis命令你都掌握了没?
  10. @Repository , @Service , @Controller 和 @Component
  11. AVS解码器在DSP平台上的优化
  12. php中的空格键,使用PHP使用数组键中的空格解析Json响应
  13. 易汉博承建的数据库再发Nature子刊
  14. 大工13秋《计算机文化基础》在线测试1,大工13秋《计算机文化基础》辅导资料六...
  15. 基于ZYNQ FPGA实现8路ADC数据采集存储(AD7606)
  16. spring-boot-1.4x后@ConfigurationProperties注解舍弃location
  17. enter 默认搜索
  18. springboot调用so文件
  19. java设计一个转动的风扇_【scratch玩转wedo入门课】第3课 转动的风扇
  20. 大数据服务器环境准备(三台服务)

热门文章

  1. 第七节:通信之WLAN(信道)
  2. IT痴汉的工作现状33-HTML5的春天是原生App的冬天?
  3. opencv 二维图像 特征检测 特征描述 特征匹配 平面物体识别跟踪
  4. 杨幂换脸不算啥,AI还能造出“并不存在”的美食图、假简历
  5. C语言俄罗斯方块删除某一行,俄罗斯方块消除满格问题,消除一行后出了问题...
  6. PHP获取项目根目录
  7. 【华人学者风采】洪小文 微软亚洲研究院
  8. [转]60个英文阅读网站强力推荐
  9. 【Spring Boot入门】AOP基础及Advice的执行顺序
  10. 如何确定EINT中断唤醒源