使用IPFS作为Java项目的文件系统
使用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
: 哈系,可根据编码标准转换cid
:multihash
的扩展,文件内容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项目的文件系统相关推荐
- 将已有项目转为se项目_如何将 Java 项目转换成 Maven 项目
本文内容 Java 项目 Maven 项目 Java 项目转换成 Maven 项目 本文主要介绍如何将 Java 项目转换成 Maven 项目.首先要明确的是,用 Maven 管理 Java 项目的确 ...
- 立足GitHub学编程:13个不容错过的Java项目
今天我们将整理一大波干货满满的优秀Java项目. GitHub可谓一座程序开发的大宝库,有些项目值得fork,有些则能帮助我们改进自有代码或者学习编程技能.无论如何,开发工作当中我们几乎不可能绕得开G ...
- 用gradle启动java项目_构建Java项目
#构建Java项目# 上一节我们简要介绍了如何编写一个单机的To Do应用,接下来要打包部署成可执行的应用,我们需要编译源代码,生成的class文件需要打包到JAR文件中.JDK提供了javac 和j ...
- Java项目架构演进和SpringCloud总结
Java项目架构演进过程和SpirngCloud知识总结: 技术梳理 开发技术栈以SpringCloud为主,单个微服务模块以SpringMVC+SpringBoot/Spring+MyBatis组合 ...
- java服务器项目,java项目服务器部署
java项目服务器部署 内容精选 换一换 硬件要求如表1所示.操作系统要求如表2所示.如果是全新安装操作系统,可选择"Minimal Install"安装方式并勾选Developm ...
- java lib 不在构建路径里面问题_svn - Eclipse“这个编译单元不在java项目的构建路径上”...
svn - Eclipse"这个编译单元不在java项目的构建路径上" 我无法在Eclipse上使用自动完成功能. 我正在研究svn上的项目. 我通过进入Eclipse在Eclip ...
- k8s实战之手动部署PHP项目和Java项目
微信公众号:运维开发故事,作者:double冬 对k8s刚入门的朋友而言,光搭建k8s集群是不够的,我们需要更多的理论加实战,才能更好的掌握k8s的好处,当我们成功部署一个k8s集群之后,我们需要在实 ...
- JSD-2204-续 配置中心-Nginx-Linux部署java项目-Day19
1.续 配置中心 上次课我们完成了cart模块的数据库配置信息添加到nacos的操作 我们也删除了cart模块原有的连接数据库信息的配置 下面开始,我们尝试连接nacos配置中心,读取数据库配置信息, ...
- 【Java项目】好客租房——前台后台系统
前置知识:ReactJS AntdesignPro搭建后台信息管理系统 Semantic-UI前台 nodejs模拟前台后端,用于前后端分离开发 后端提供mock数据 AntDesignPro应用 1 ...
最新文章
- CentOS 5 安装as86汇编器
- 在HANA里设置后台Job
- 北斗导航 | Select Satellite 选星算法
- ---WebCam网络摄像头6 编译WebCam
- Java3y文章目录导航
- PHP: 手把手编写自己的 MVC 框架实例教程
- Stack Overflow引入CROKAGE,搜问题不用再东拼西凑
- ssl1063-统计数字【哈希表】
- redis将散裂中某个值自增_这些Redis命令你都掌握了没?
- @Repository , @Service , @Controller 和 @Component
- AVS解码器在DSP平台上的优化
- php中的空格键,使用PHP使用数组键中的空格解析Json响应
- 易汉博承建的数据库再发Nature子刊
- 大工13秋《计算机文化基础》在线测试1,大工13秋《计算机文化基础》辅导资料六...
- 基于ZYNQ FPGA实现8路ADC数据采集存储(AD7606)
- spring-boot-1.4x后@ConfigurationProperties注解舍弃location
- enter 默认搜索
- springboot调用so文件
- java设计一个转动的风扇_【scratch玩转wedo入门课】第3课 转动的风扇
- 大数据服务器环境准备(三台服务)
热门文章
- 第七节:通信之WLAN(信道)
- IT痴汉的工作现状33-HTML5的春天是原生App的冬天?
- opencv 二维图像 特征检测 特征描述 特征匹配 平面物体识别跟踪
- 杨幂换脸不算啥,AI还能造出“并不存在”的美食图、假简历
- C语言俄罗斯方块删除某一行,俄罗斯方块消除满格问题,消除一行后出了问题...
- PHP获取项目根目录
- 【华人学者风采】洪小文 微软亚洲研究院
- [转]60个英文阅读网站强力推荐
- 【Spring Boot入门】AOP基础及Advice的执行顺序
- 如何确定EINT中断唤醒源