搭建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实现相关推荐

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

    使用IPFS作为Java项目的文件系统 1. 项目中引入java-ipfs-http-client包 编辑pom.xml文件,加入以下内容 <!--JitPack Git包管理--> &l ...

  2. java ipfs文件存储_原来IPFS是这样存储文件的

    概述 CID 在介绍IPFS存储文件的远离之前,先介绍一个重要的标识--CID(Content-ID),CID是IPFS中用来表示内容的标识,可以用来表示一个文件,也可以用来表示一个文件块.如下所示, ...

  3. ipfs浏览器java实现_IPFS + Ethereum(上篇):JS+IPFS-API存储和获取数据

    1. 内容简介 这篇文章将为大家讲解js-ipfs-api的简单使用,如何将数据上传到IPFS,以及如何从IPFS通过HASH读取数据. 2. IPFS-HTTP效果图 3. 实现步骤 3.1 安装c ...

  4. ipfs浏览器java实现_Brave浏览器中的IPFS

    Brave浏览器用户人数已经超过2000万,并且已经开始支持本地 IPFS协议仍然在开发.完善中.相信很多人在日常上网过程中,经常遇到如网络中断或404,重要信息(如COVID-19新闻)被过滤.联网 ...

  5. java maven项目使用sonar审核代码

    为什么80%的码农都做不了架构师?>>>    一.pom增加插件 <plugin><groupId>org.sonarsource.scanner.mave ...

  6. java 区块链使用_使用Java创建第一个区块链

    本系列教程的目的是帮助你了解如何开发区块链技术.在本教程中,我们将: 创建你的第一个非常基础的区块链. 实施简单的工作量证明系统(采矿). 探讨任何的可能性. 我假设你对面向对象编程有基本的了解.值得 ...

  7. 如何在基于Bytom开发过程中集成IPFS

    本文介绍了基于Bytom开发过程中集成IPFS. step1: 搭建bytom节点 比原相关资料:https://github.com/Bytom-Community/Bytom_Docs 搭建byt ...

  8. Hyperledger Fabric 超级账本 Java 开发区块链环境构建

    面向 Java 开发人员的链代码简介 您听说过区块链超级账本Hyperledger Fabric?对Java开发人员有何用.我将分步展示用 Hyperledger Fabric v0.6来搭建开发环境 ...

  9. 火狐渗透测试浏览器_微软、火狐浏览器、Opera浏览器等主流平台纷纷布局IPFS:大势所趋...

    如今中心化网络出现了非常多的弊端,所以去中心化IPFS顺势而生.微软.Brave.Opera.火狐等主流平台纷纷布局IPFS. 2020年2月10日,协议实验室发布了<IPFS 2020年项目重 ...

最新文章

  1. 数量级提升!深度学习让机器人抓取更高效
  2. Win10~KinectV1开发
  3. 《认知突围》做复杂时代的明白人,读书分享
  4. matlab中描绘简单曲线和点
  5. S7 Linux用户管理及用户信息查询命令
  6. 订单操作-表结构分析与表创建
  7. 【C语言】满分:1047 编程团体赛 (20分)
  8. python 虚拟环境 mac,Mac下python 虚拟环境安装
  9. ado.net mysql 连接池_ADO.NET数据库连接池的介绍 | 学步园
  10. docker 镜像备份magento 2.2.3
  11. 基于珞珈一号夜间灯光数据的GDP空间化
  12. android带人脸识别码,Android自带的人脸识别
  13. dnf服务器字幕乱码win10系统,Windows10下输入法设置 教你避免DNF卡顿
  14. PS图层蒙版、参考线显示边距、盖印图层
  15. ZOJ4043 : Virtual Singers
  16. ETF操作实战记录:2022-2-25
  17. 一个专家级软件架构师的自白书
  18. 高中计算机学科教学计划,高中信息技术学科教学计划
  19. mysql中用来取余数的函数是_MySQL函数 练习题
  20. 数据结构:线性链表的c语言实现

热门文章

  1. 365打卡小程序搭建教程
  2. 【MOOC课程】浙大数据结构记录(下)
  3. Discrete Maths Answer
  4. 计算机教学研讨会方案,【教学教研】新学年我校计算机专业组积极开展教学研讨会议...
  5. c++ string最大长度_关于C++ std::string类内存布局的探究
  6. 深入理解 RecyclerView 的绘制流程和滑动原理,直面春招
  7. 宝讯网捷:2022拼多多前期怎样运营?
  8. mysql项目案例电影_Python+Django+Mysql实现在线电影推荐系统 基于用户、项目的协同过滤推荐在线电影系统 代码实现 源代码下载...
  9. 如何灵活使用ASCII编码
  10. JPA的@Query用法