LoginSignup
0
1

【Node.js】Pinata-SDKでファイルをIPFSへPINする

Last updated at Posted at 2023-11-16

ここを見ながらやりました。

ファイルをアップロードするようなことを、IPFSではピンというらしいですね。
(違ったらごめんなさい)

私の環境

  • macOS Ventura
  • Node.js: v20.9.0
  • 開発環境: VSCode

準備

PINATA

APIキーを取得して、どこかに控えておく

環境変数の設定

ルートディレクトリで
Pinata のSDKと
環境変数設定のライブラリ dotenv をインストールする。

npm install --save @pinata/sdk
npm install --save dotenv

ルートディレクトリに .envファイルを作成し、
さっき控えたAPIキーなどを環境変数を設定する。

.env
PINATA_API_KEY = "PINATAのAPIキー"
PINATA_API_SECRET = "PINATAのAPIシークレットキー" 

APIがとおるか、以下のコードで確認

index.js
const PINATA_API_KEY = process.env.PINATA_API_KEY;
const PINATA_API_SECRET = process.env.PINATA_API_SECRET;

const pinataSDK = require('@pinata/sdk');
const pinata = new pinataSDK(PINATA_API_KEY, PINATA_API_SECRET);

pinata.testAuthentication().then((result) => {
    //handle successful authentication here
    console.log(result);
}).catch((err) => {
    //handle error here
    console.log(err);
});

コンソールログに以下のメッセージが出たらOK

{ authenticated: true }

こんなエラーが出る場合は、

Error [ERR_SOCKET_CONNECTION_TIMEOUT]: Socket connection timeout

Node.jsのバージョンを V20.9.0 にアップデートしたら解決しました。 

ちなみに、僕のバージョン管理ツールは NVM なのでここをみながらやりました。

ファイルをIPFSにピンする

ここを見ながらやりました。

ファイルを用意する。

この写真を以下の index.js と同じディレクトリに pic.png というファイル名で保存する。

index.js
require('dotenv').config();
const PINATA_API_KEY = process.env.PINATA_API_KEY;
const PINATA_API_SECRET = process.env.PINATA_API_SECRET;

const pinataSDK = require('@pinata/sdk');
const pinata = new pinataSDK(PINATA_API_KEY, PINATA_API_SECRET);

const fs = require('fs');
const readableStreamForFile = fs.createReadStream('./pic.png');
const options = {
    pinataMetadata: {
        //nameは必須
        name: 'Cats',
        //keyvaluesは必須ではない
        keyvalues: {    
            customKey: 'customValue',
            customKey2: 'customValue2'
        }
    },
    pinataOptions: {
        cidVersion: 0
    }
};
pinata.pinFileToIPFS(readableStreamForFile, options).then((result) => {
    //handle results here
    console.log(result);
}).catch((err) => {
    //handle error here
    console.log(err);
});

これを実行すると、

{
  IpfsHash: 'QmWZF4Vbm8nqfkvVngnYWhgyLc8XYp7kN4RWZa1VfMuDxc',
  PinSize: 74809,
  Timestamp: '2023-11-16T14:42:17.257Z'
}

IPFSに保存されました。

このアドレスで確認できます。

https://gateway.pinata.cloud/ipfs/<IpfsHash>

つまり、本件ではこちらのアドレスに猫の写真がピンされました。
https://gateway.pinata.cloud/ipfs/QmWZF4Vbm8nqfkvVngnYWhgyLc8XYp7kN4RWZa1VfMuDxc

以上です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1