前回の記事ではFleekのStorageサービスに対してWebのコンソールと、コマンドラインツール(AWS CLI)を使ってアクセスしました。
今回はプログラムでアクセスできるSDKであるFleek Storage JSを試してみたいと思います。
使ってみる
SDKでアクセスするにあたり、API KEYを取得する必要があります。 前回の記事でも触れていますので、ここでは割愛します。
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'
],
})
apiKey
とapiSecret
とkey
が必須パラメーターです。
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にアクセスする方法を調べて実行してみる予定です