Fleek Storage JSを使ってFleek Storageサービスとやり取りする

2022.08.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

前回の記事ではFleekのStorageサービスに対してWebのコンソールと、コマンドラインツール(AWS CLI)を使ってアクセスしました。

今回はプログラムでアクセスできるSDKであるFleek Storage JSを試してみたいと思います。

使ってみる

SDKでアクセスするにあたり、API KEYを取得する必要があります。 前回の記事でも触れていますので、ここでは割愛します。

Fleek Storage JsのReadme

SDKのインストール

npmかyarnを使ってインストールできます。

$ cd [[project_folder]]

$ npm install @fleekhq/fleek-storage-js
or
$ yarn add @fleekhq/fleek-storage-js

組み込み

プロジェクトフォルダーの直下にapp.jsというファイルをつくって。その中に組み込んで動かしてみようと思います。

$ vi app.js

以下の記述で読み込むことが可能です。

// importステートメントを使用する場合
import fleekStorage from '@fleekhq/fleek-storage-js'

// requireを使用する場合
const fleekStorage = require('@fleekhq/fleek-storage-js')

メソッド

READEMEによると、get, upload, deleteFile, listFiles, listBuckets, getFileFromHash があるようです

一つずつ実行してみます。

get

Storageにアップロードしたファイルの関連データを取得できます(コンテンツまたはキー、ハッシュ、publicUrlなど)

const myFile = await fleekStorage.get({
  apiKey: 'my-key',
  apiSecret: 'my-secret',
  key: 'my-file-key',
  getOptions: [
    'data',
    'bucket',
    'key',
    'hash',
    'publicUrl'
  ],
})

apiKeyapiSecretkeyが必須パラメーターです。

keyはファイルを識別するためのキーです。

getOptionsは取得したい関連データで、デフォルトはdataとなっています。

以下の内容のテキストデータを使って、

$ cat test.txt
this is test file.

データ取得するためのコードを実行すると、

const myFile = await fleekStorage.get({
  apiKey: process.env.FLEEK_API_KEY,
  apiSecret: process.env.FLEEK_API_SECRET,
  key: 'test.txt',
})

console.log(myFile)
$ node app.js
{
  data: <Buffer 74 68 69 73 20 69 73 20 74 65 73 74 20 66 69 6c 65 2e 0a>
}

このような結果が返ってきます。

文字列に変換すると

console.log(myFile.data.toString('UTF-8'))

> this is test file.

と、ファイルの内容が取得できました。

getOptionsは配列で指定できるので、

const myFile = await fleekStorage.get({
  apiKey: process.env.FLEEK_API_KEY,
  apiSecret: process.env.FLEEK_API_SECRET,
  key: 'test.txt',
  getOptions: ["data", "bucket", "hash", "key", "publicUrl"]
})

console.log(myFile)

と全てのオプションを指定すると、

{
  data: <Buffer 74 68 69 73 20 69 73 20 74 65 73 74 20 66 69 6c 65 2e 0a>,
  bucket: '0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket',
  hash: 'QmTNjzC4L2DHPrt41GvHna9X2BZfV54mj741dbWN95UsB1',
  key: 'test.txt',
  publicUrl: 'https://storageapi.fleek.co/0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket/test.txt'
}

といったデータが取得できました。

upload

uploadメソッドは、キーで識別されるファイルをBucketにアップロードします。この関数は、ファイルのハッシュ値、publicUrl、キー、バケットを返します

例)

fs.readFile(filePath, async (error, fileData) => {
  const uploadedFile = await fleekStorage.upload({
    apiKey: process.env.FLEEK_API_KEY,
    apiSecret: process.env.FLEEK_API_SECRET,
    key: 'package_sample.json',
    data: fileData,
  });

  console.log(uploadedFile)
})

を実行すると、

{
  hash: 'bafybeid7a4h73gic4fjiss4vdjf7wn5o2sogkvngoyf2ovlwr2hudwohje',
  hashV0: 'QmWtWjUqzGoMuVhiCaxjcnVeDb3PaWpfSnPshKu6UTcZep',
  key: 'package_sample.json',
  bucket: '0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket',
  publicUrl: 'https://storageapi.fleek.co/0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket/package_sample.json'
}

といった出力が返されました。

Webのコンソールでも追加されたことを確認できます。

deleteFile

キーとバケットで識別されるファイルを削除できます。 この関数は、成功した場合、削除されたファイルのキーとバケットを返します。

※ ファイルが存在しない場合でも、このメソッドは正常に実行されます

例)

uploadメソッドでアップロードしたファイルを削除してみます。

const deletedFile = await fleekStorage.deleteFile({
    apiKey: process.env.FLEEK_API_KEY,
    apiSecret: process.env.FLEEK_API_SECRET,
    key: 'package_sample.json',
    bucket: '[[my-bucket]]',
 });
console.log(deletedFile)

※ bucketパラメーターはオプションで、デフォルトではアカウントのバケットが使われます。

{
  bucket: '0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket',
  key: 'package_sample.json'
}

結果はこのようになります。

Webのコンソールでも削除されていました。

listFiles

キー、ハッシュ、publicUrlなど、Bucket内のすべてのファイルに関する情報を取得できます。

例)

このバケットのファイルリストを取得する例です。

const files = await fleekStorage.listFiles({
  apiKey: process.env.FLEEK_API_KEY,
  apiSecret: process.env.FLEEK_API_SECRET,
  bucket: '[[my-bucket]]',
  prefix: '[[my-folder]]]',
  getOptions: [
    'bucket',
    'key',
    'hash',
    'publicUrl'
  ],
})
console.log(files)

※ bucketパラメーターはオプションで、デフォルトではアカウントのバケットが使われます。

※ prefixパラメーターはオプションで、ファイルをリストアップしたいフォルダの名前を指定できます

※ getOptionsパラメーターはオプションで,取得したい関連データで、デフォルトはdataとなっています。

結果は、

[
  {
    key: 'assets/',
    bucket: '0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket',
    hash: 'QmTecfbJp9xpxoGur23fBEUYQCta7MCKygGyCMa4YQcp1D',
    publicUrl: 'https://storageapi.fleek.co/0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket/assets/'
  },
  {
    key: 'test.txt',
    bucket: '0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket',
    hash: 'QmTNjzC4L2DHPrt41GvHna9X2BZfV54mj741dbWN95UsB1',
    publicUrl: 'https://storageapi.fleek.co/0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket/test.txt'
  },
  {
    key: 'スクリーンショット 2022-07-29 10.58.57.png',
    bucket: '0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket',
    hash: null,
    publicUrl: 'https://storageapi.fleek.co/0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket/スクリーンショット 2022-07-29 10.58.57.png'
  },
  {
    key: 'スクリーンショット 2022-07-29 11.06.02.png',
    bucket: '0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket',
    hash: null,
    publicUrl: 'https://storageapi.fleek.co/0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket/スクリーンショット 2022-07-29 11.06.02.png'
  }
]

のようになります。

assetsフォルダの中身をリストしたいなら、

prefix: "assets",

をつけてアクセスします。

[
  {
    key: 'assets/スクリーンショット 2022-07-28 15.46.38.png',
    bucket: '0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket',
    hash: null,
    publicUrl: 'https://storageapi.fleek.co/0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket/assets/スクリーンショット 2022-07-28 15.46.38.png'
  },
  {
    key: 'assets/スクリーンショット 2022-07-29 10.58.57.png',
    bucket: '0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket',
    hash: null,
    publicUrl: 'https://storageapi.fleek.co/0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket/assets/スクリーンショット 2022-07-29 10.58.57.png'
  }
]

このようにassetsフォルダの中身だけ結果に返ってきます。

listBuckets

アカウントに関連付けられたバケット名の配列を返します

例)

const buckets = await fleekStorage.listBuckets({
  apiKey: process.env.FLEEK_API_KEY,
  apiSecret: process.env.FLEEK_API_SECRET,
})
console.log(buckets)

結果は、

[ { name: '0c82ebdb-00c4-461c-acb2-d582d7ea4f18-bucket' } ]

が返ってきました。

getFileFromHash

FleekのIPFSゲートウェイからハッシュを利用してファイルのデータをダウンロードするユーティリティ関数です。

ゲートウェイはパブリックなものなので、API KeyとSSecretが必要ないのがこれまでのメソッドと大きく異なりますね。

例)

このファイルをハッシュから取得するには、以下のようなコードを実行することで可能です。

const myFile = await fleekStorage.getFileFromHash({
  hash: 'bafybeick2oidocd2ruow3tz73sqh2uq2k4rbxemopacr3tm5hw77mphmqq',
  getFileFromHashOptions: [
    'buffer',
  ],
})
console.log(myFile)

※ getFileFromHashOptionsはオプションで、bufferを指定するとファイル全体を一度にバッファーとして返します。

<Buffer 74 68 69 73 20 69 73 20 74 65 73 74 20 66 69 6c 65 2e 0a>

のように結果を取得できます。

getFileFromHashOptionsを指定しない場合は、

this is test file.

といった感じで、ファイルの中身が返ってきます。

まとめ

FleekのStorage JSを使用してプログラムからのアクセスを試して見ました。

アップロードやリスト取得など簡単に行えるのでアプリケーション開発者はこれにはにっこりなのではないでしょうか。 Webサイトのアセットファイルの格納先や、利用ユーザーの公開ファイルの格納先としてなどの使い道が出てくるかと思います。

次回はaws-sdkを使ってFleek Storageにアクセスする方法を調べて実行してみる予定です

参考