IPFS Java实现
搭建Ipfs私有网络
IPFS搭建指引
java ipfs功能实现
依赖
<repositories><repository><id>jitpack.io</id><url>https://jitpack.io</url></repository></repositories><dependency><groupId>com.github.ipfs</groupId><artifactId>java-ipfs-api</artifactId><version>v1.2.2</version></dependency><dependency><groupId>com.github.multiformats</groupId><artifactId>java-multihash</artifactId><version>v1.1.0</version></dependency>
interface
package com.jkhl.infrastructure.common.ipfsServer;import java.io.IOException;public interface IIpfsService {/*** 指定path+文件名称,上传知ipfs* @param filePath* @return* @throws IOException*/public String uploadToIpfs(String filePath) throws IOException;/*** 将byte格式的数据,上传至ipfs* @param data* @return* @throws IOException*/public String uploadToIpfs(byte[] data) throws IOException;/*** 根据Hash值,从ipfs下载内容,返回byte数据格式* @param hash* @return*/public byte[] downFromIpfs(String hash);/*** 根据Hash值,从ipfs下载内容,并写入指定文件destFilePath* @param hash* @param destFilePath*/public void downFromIpfs(String hash, String destFilePath);
}
实现
package com.jkhl.infrastructure.common.ipfsServer;import com.jkhl.infrastructure.config.CustomizeConfig;
import io.ipfs.api.IPFS;
import io.ipfs.api.MerkleNode;
import io.ipfs.api.NamedStreamable;
import io.ipfs.multihash.Multihash;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;@Log4j2
@Service
public class IpfsService implements IIpfsService {@Autowiredprivate CustomizeConfig customizeConfig;private static IPFS IPFSCONN = null;public void initConnect() {try {if(IPFSCONN==null) {String connect = customizeConfig.getIpfsConnect();IPFS ipfsConnect= new IPFS(connect);IPFSCONN = ipfsConnect;}} catch (Exception e) {log.error(customizeConfig.getIpfsConnect() + "ipfs连接失败!原因: " + e.getMessage());}}@Overridepublic String uploadToIpfs(String filePath) throws IOException {this.initConnect();NamedStreamable.FileWrapper file = new NamedStreamable.FileWrapper(new File(filePath));MerkleNode addResult = IPFSCONN.add(file).get(0);log.info(String.format("%s文件上传成功,Hash值为: %s",file.getName(), addResult.hash));return addResult.hash.toString();}@Overridepublic String uploadToIpfs(byte[] data) throws IOException {this.initConnect();NamedStreamable.ByteArrayWrapper file = new NamedStreamable.ByteArrayWrapper(data);MerkleNode addResult = IPFSCONN.add(file).get(0);log.info(String.format("%s文件上传成功,Hash值为: %s",file.getName(), addResult.hash));return addResult.hash.toString();}@Overridepublic byte[] downFromIpfs(String hash) {this.initConnect();byte[] data = null;try {data = IPFSCONN.cat(Multihash.fromBase58(hash));} catch (IOException e) {e.printStackTrace();}return data;}@Overridepublic void downFromIpfs(String hash, String destFile) {byte[] data = null;try {this.initConnect();data = IPFSCONN.cat(Multihash.fromBase58(hash));} catch (IOException e) {log.error(hash + "下载失败,原因:" + e.getMessage());}if (data != null && data.length > 0) {File file = new File(destFile);if (file.exists()) {file.delete();}FileOutputStream fos = null;try {fos = new FileOutputStream(file);fos.write(data);fos.flush();} catch (IOException e) {log.error(destFile + "目标文件写入失败;原因:" + e.getMessage());} finally {try {fos.close();} catch (IOException e) {log.error(e.getMessage());}}}}
}
IPFS Java实现相关推荐
- 使用IPFS作为Java项目的文件系统
使用IPFS作为Java项目的文件系统 1. 项目中引入java-ipfs-http-client包 编辑pom.xml文件,加入以下内容 <!--JitPack Git包管理--> &l ...
- java ipfs文件存储_原来IPFS是这样存储文件的
概述 CID 在介绍IPFS存储文件的远离之前,先介绍一个重要的标识--CID(Content-ID),CID是IPFS中用来表示内容的标识,可以用来表示一个文件,也可以用来表示一个文件块.如下所示, ...
- ipfs浏览器java实现_IPFS + Ethereum(上篇):JS+IPFS-API存储和获取数据
1. 内容简介 这篇文章将为大家讲解js-ipfs-api的简单使用,如何将数据上传到IPFS,以及如何从IPFS通过HASH读取数据. 2. IPFS-HTTP效果图 3. 实现步骤 3.1 安装c ...
- ipfs浏览器java实现_Brave浏览器中的IPFS
Brave浏览器用户人数已经超过2000万,并且已经开始支持本地 IPFS协议仍然在开发.完善中.相信很多人在日常上网过程中,经常遇到如网络中断或404,重要信息(如COVID-19新闻)被过滤.联网 ...
- java maven项目使用sonar审核代码
为什么80%的码农都做不了架构师?>>> 一.pom增加插件 <plugin><groupId>org.sonarsource.scanner.mave ...
- java 区块链使用_使用Java创建第一个区块链
本系列教程的目的是帮助你了解如何开发区块链技术.在本教程中,我们将: 创建你的第一个非常基础的区块链. 实施简单的工作量证明系统(采矿). 探讨任何的可能性. 我假设你对面向对象编程有基本的了解.值得 ...
- 如何在基于Bytom开发过程中集成IPFS
本文介绍了基于Bytom开发过程中集成IPFS. step1: 搭建bytom节点 比原相关资料:https://github.com/Bytom-Community/Bytom_Docs 搭建byt ...
- Hyperledger Fabric 超级账本 Java 开发区块链环境构建
面向 Java 开发人员的链代码简介 您听说过区块链超级账本Hyperledger Fabric?对Java开发人员有何用.我将分步展示用 Hyperledger Fabric v0.6来搭建开发环境 ...
- 火狐渗透测试浏览器_微软、火狐浏览器、Opera浏览器等主流平台纷纷布局IPFS:大势所趋...
如今中心化网络出现了非常多的弊端,所以去中心化IPFS顺势而生.微软.Brave.Opera.火狐等主流平台纷纷布局IPFS. 2020年2月10日,协议实验室发布了<IPFS 2020年项目重 ...
最新文章
- 数量级提升!深度学习让机器人抓取更高效
- Win10~KinectV1开发
- 《认知突围》做复杂时代的明白人,读书分享
- matlab中描绘简单曲线和点
- S7 Linux用户管理及用户信息查询命令
- 订单操作-表结构分析与表创建
- 【C语言】满分:1047 编程团体赛 (20分)
- python 虚拟环境 mac,Mac下python 虚拟环境安装
- ado.net mysql 连接池_ADO.NET数据库连接池的介绍 | 学步园
- docker 镜像备份magento 2.2.3
- 基于珞珈一号夜间灯光数据的GDP空间化
- android带人脸识别码,Android自带的人脸识别
- dnf服务器字幕乱码win10系统,Windows10下输入法设置 教你避免DNF卡顿
- PS图层蒙版、参考线显示边距、盖印图层
- ZOJ4043 : Virtual Singers
- ETF操作实战记录:2022-2-25
- 一个专家级软件架构师的自白书
- 高中计算机学科教学计划,高中信息技术学科教学计划
- mysql中用来取余数的函数是_MySQL函数 练习题
- 数据结构:线性链表的c语言实现
热门文章
- 365打卡小程序搭建教程
- 【MOOC课程】浙大数据结构记录(下)
- Discrete Maths Answer
- 计算机教学研讨会方案,【教学教研】新学年我校计算机专业组积极开展教学研讨会议...
- c++ string最大长度_关于C++ std::string类内存布局的探究
- 深入理解 RecyclerView 的绘制流程和滑动原理,直面春招
- 宝讯网捷:2022拼多多前期怎样运营?
- mysql项目案例电影_Python+Django+Mysql实现在线电影推荐系统 基于用户、项目的协同过滤推荐在线电影系统 代码实现 源代码下载...
- 如何灵活使用ASCII编码
- JPA的@Query用法