这篇“ipfs-api访问IPFS的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ipfs-api访问IPFS的方法是什么”文章吧。
二、ipfs-api安装与使用
星际文件系统Ipfs节点提供和REST API接口,可供我们在程序代码中操作节点进行文件的上传等操作。不过大多数情况下,我们并不需要直接操作这个REST开发接口,而是使用经过封装的更友好的ipfs-api,一个nodejs包。
2.1安装nodejs
到官网下载nodejs安装包:32位,64位。下载后双击进行安装即可。
开一个控制台窗口,测试:
C:\Users\hubwiz> node -v V8.11.1
2.2安装ipfs-api
Ipfs-api的安装需要git命令行,因此我们先安装git。从官网下载git安装包:32位,64位。下载后双击安装即可。
执行git命令测试:
D:\test-ipfs-api> git version git version 2.16.2.windows.1
ipfs-api需要编译原生node模块,因此需要安装VisualStudio 2015和python27。
官网下载VisualStudio 2015社区版,双击安装即可。 官网下载Python27安装包,双击安装并设置PATH环境变量使python可用。
重新开一个控制台,使环境变量生效。现在安装ipfs-api:
D:\test-ipfs-api> npm install ipfs-api + ipfs-api@20.0.1 added 1 package, updated 1 package and moved 1 package in 22.138s
2.3测试代码 – nodejs
在D:\test-ipfs-api目录下创建一个测试脚本test.js:
const ipfsAPI = require('ipfs-api') const ipfs = ipfsAPI('localhost', '5001', {protocol: 'http'}) const buffer = Buffer.from('this is a demo') ipfs.add(buffer) .then( rsp => console.log(rsp[0].hash)) .catch(err => console.error(err))
执行这个脚本:
D:\test-ipfs-api> node test.js QmfQS4vm9YZTAyGZEkDqm81xripwsK3NgqfNkbCdoeEw5i
也就是说,我们将内容this is a demo
添加到本地仓库后,得到哈希值 QmfQS4vm9YZTAyGZEkDqm81xripwsK3NgqfNkbCdoeEw5i
。现在可以使用cat子命令来查看这个哈希值对应的内容:
D:\test-ipfs-api> ipfs cat QmfQS4vm9YZTAyGZEkDqm81xripwsK3NgqfNkbCdoeEw5i
控制台会输出我们之前上传的内容:
this is a demo
ipfs进入监听状态后,提供了一个http网关,让我们可以使用浏览器来访问ipfs上的内容。网关默认在本机(127.0.0.1)的8080端口监听,因此使用你的浏览器访问这个URL:
http://127.0.0.1:8080/ipfs/QmfQS4vm9YZTAyGZEkDqm81xripwsK3NgqfNkbCdoeEw5i
同样可以看到我们之前上传的内容。 注意:需要首先启动监听器(ipfs daemon)并且你的浏览器和ipfs节点在同一台计算机。 ?
三、在浏览器中访问ipfs
ipfs-api也支持在browser使用。最简单的方法是使用专门针对浏览器的封装库,在html中引用即可:
<script src="https://unpkg.com/ipfs-api/dist/index.js"></script>
这个特别封装的库会创建一个全局对象ipfsAPI,我们在浏览器脚本中可以直接使用,例如:
var ipfs = window.IpfsApi('localhost', '5001')
这种方法比较简单,因此下文不再描述。接下来我们将使用更加工程化的方法, 采用webpack来直接在前端脚本中使用ipfs-api的nodejs包。
3.1 HTML页面
在D:\test-ipfs-api目录下创建index.html:
<!doctype html> <html> <head> <meta charset="utf-8"> </head> <body> <textarea id="content">THIS IS ANOTHER DEMO</textarea> <button id="upload">Upload</button> <script src="./bundle.js"></script> </body> </html>
我们的目标是,当点击按钮时,我们将文本框的内容上传到ipfs
3.2前端脚本
在D:\test-ipfs-api目录下编写脚本app.js:
import ipfsAPI from 'ipfs-api' const ipfs = ipfsAPI('localhost', '5001', {protocol: 'http'}) window.addEventListener('load', function() { let btn = document.querySelector('#upload') let txt = document.querySelector('#content') btn.addEventListener('click',()=>{ let buffer = Buffer.from(txt.value, 'utf-8'); ipfs.add(buffer) .then( rsp => console.log(rsp[0].hash)) .catch(err => console.error(err)) }) })
3.3 webpack配置
在D:\test-ipfs-api目录下编写配置文件webpack.config.js:
const webpack = require('webpack'); const path = require('path'); const CopyWebpackPlugin = require('copy-webpack-plugin'); module.exports = { entry: './app.js', output: { path: path.resolve(__dirname), filename: 'bundle.js' }, module: { loaders: [ { test: /\.js$/, exclude: /(node_modules|bower_components)/, loader: 'babel-loader', query: { presets: ['es2015'], plugins: ['transform-runtime'] } } ] } }
3.4前端脚本打包
执行webpack打包:
D:\test-ipfs-api> webpack
3.5 配置ipfs的CORS策略
由于需要从网页中访问ipfs节点,这就引入了跨域安全问题,因此我们需要配置ipfs节点使其允许跨域请求:
D:\>ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
3.6 配置ipfs的API监听地址
由于ipfs节点默认在本机(127.0.0.1)的5001端口监听API请求,因此如果你的浏览器和ipfs节点不在同一台机器上,需要让ipfs节点监听公开地址:
D:\> ipfs config --json Addresses.API '"/ip4/0.0.0.0/tcp/5001"'
当然,如果你的浏览器和ipfs节点在同一台机器上,就不需要进行这个配置了。
3.7配置ipfs的网关的监听地址
由于ipfs节点旳http网关默认在本机(127.0.0.1)的8080端口监听http请求,因此如果你的浏览器和ipfs节点不在同一台机器上,就需要让ipfs网关监听公开地址:
D:\> ipfs config --json Addresses.Gateway '"/ip4/0.0.0.0/tcp/8080"'
3.8测试网页
首先启动ipfs监听:
D:\>ipfs daemon
然后在测试目录下启动web服务器,这里使用python内置的简单服务器,当然你可以使用任何熟悉的web服务器:
D:\test-ipfs-api> python –m SimpleHTTPServer Serving HTTP on 0.0.0.0 port 8000 ...
现在打开你的浏览器,访问http://127.0.0.1:8000/,一切顺利的话,你可以看到一个文本框和一个按钮,点击按钮,即可将文本框的内容上传到ipfs节点。