图片传输到ipfs节点然后将生成的ipfs访问链接存到区块链

在区块链上直接存储图片不仅时间很长,而且需要进行分片和拼接,比较麻烦,我们直接使用ipfs存储图片

流程描述:

  1. 首先在本地搭建ipfs节点,使用go-ipfs版本进行搭建,搭建完之后,使用 ipfs daemon指令启动ipfs服务监听,同时占用8080端口。

    使用时我们需要先打开ipfs服务,再启动项目,避免端口冲突。正确启动之后的命令行应该如下图所示。
    在这里插入图片描述

  2. 服务启动成功后,我们首先在我们的前端绑定一个input,这个input的type是file类型,同时指定一个id,我们通过这个id获取到这个文件(1)。然后将这个文件赋值(2)

    1.<input type="file" class="form-control add_img" id="co_img" placeholder="Ex: 请选择图片">
        
    2.const file = document.getElementById("co_img").files[0];
    
    
    
  3. 实现这两步之后,我们相当于把文件取出来了,取出来之后,我们再把这个文件当成参数传到saveImageOnIpfs方法里,saveImageOnIpfs方法里有一个ipfs.add()方法,此方法就是将图片传输到ipfs上,同时返回传输回的结果,会有一个hash值返回,resolve函数可以将hash值作为返回值再传到.then里的函数的参数,然后拼接成一个在这里插入图片描述
    类似这种的链接,即href,然后我们再在这个this函数里面调用App.addcollectionsUp方法把链接和相关数据上传到区块链上。

    uploadimg:async function(){
            const file = document.getElementById("co_img").files[0];
            console.log(file)
            if(file==null){
                alert("未选择文件");
            }
            const httpGateway = 'http://127.0.0.1:8080'
            this.saveImageOnIpfs(file).then(function(hash){
                //这里就把图片的hash取出来之后同时拼接到了链接后面
                const href = `${httpGateway}/ipfs/${hash}`
                img_href = href;
                console.log(img_href);
                App.addcollectionsUp();
            })
        },
     saveImageOnIpfs: function(input) {
            return new Promise(async(resolve, reject) => {
                try {
                    //ipfs的add方法是将东西添加到ipfs网络上
                    let results = await ipfs.add(input);
                    let hash1 = results.path;
                    resolve(hash1);
                } catch (err) {
                    console.error(err);
                    reject(err);
                }
            })
        },
    
  4. addcollectionsUp函数定义如下:

        addcollectionsUp: async function() {
            let _conum = $("#co_num").val();
            // console.log(img_href);
            let _coprice = $("#co_price").val();
            let  _coname = $("#co_name").val();
            let _cointro = $("#co_intro").val();
            const { addCollectionUp } = this.meta.methods;
            let result = await addCollectionUp(_conum, _coprice, _coname,_cointro,img_href).send({ from: this.account });
            console.log(result);
            window.location.reload(); 
        },
    

    我们只需要把生成的href赋值给img_href就可以直接传到区块链上了。然后再取出来在前端渲染即可。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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作为存储解决方案,因为它提供了更加便宜、安全、可快速集成的存储解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值