Strapi plugin logo for IPFS

IPFS

IPFS provider for Strapi uploads

Strapi Provider Upload IPFS Storage

strapi-provider-upload-ipfs-storage

IPFS (Filebase, Pinata, Fleek, Web3, Lighthouse) provider for Strapi uploads.

Installation

# using yarn
yarn add strapi-provider-upload-ipfs-storage

# using npm
npm install strapi-provider-upload-ipfs-storage --save

Providers Configuration

./config/plugins.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
module.exports = ({ env }) => ({
  // ...
  upload: {
    config: {
      provider: "strapi-provider-upload-ipfs-storage",
      providerOptions: {
        defaultStorage: "filebase",
        filebase: {
          // https://console.filebase.com/keys
          key: env("FILEBASE_KEY"),
          secret: env("FILEBASE_SECRET"),
          bucket: env("FILEBASE_BUCKET"),
        },
        pinata: {
          // https://app.pinata.cloud/keys
          jwt: env("PINATA_JWT"),
        },
        fleek: {
          // https://app.fleek.co/#/settings/general/profile
          key: env("FLEEK_KEY"),
          secret: env("FLEEK_SECRET"),
          bucket: env("FLEEK_BUCKET"),
        },
        web3: {
          // https://web3.storage/tokens/
          token: env("WEB3_TOKEN"),
        },
        lighthouse: {
          // https://files.lighthouse.storage/dashboard/apikey
          token: env("LIGHTHOUSE_TOKEN"),
        },
      },
    },
  },
  // ...
});

.env

FILEBASE_KEY=""
FILEBASE_SECRET=""
FILEBASE_BUCKET=""

PINATA_JWT=""

FLEEK_KEY=""
FLEEK_SECRET=""
FLEEK_BUCKET=""

WEB3_TOKEN=""

LIGHTHOUSE_TOKEN=""

Configuration Strapi + Filebase [ tutorial ]

Configuration Strapi + Filebase
VariableTypeDescriptionRequired
keystringFilebase access keyyes
secretstringFilebase access secretyes
bucketstringFilebase bucket nameyes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
module.exports = ({ env }) => ({
  // ...
  upload: {
    config: {
      provider: "strapi-provider-upload-ipfs-storage",
      providerOptions: {
        defaultStorage: "filebase",
        filebase: {
          // https://console.filebase.com/keys
          key: env("FILEBASE_KEY"),
          secret: env("FILEBASE_SECRET"),
          bucket: env("FILEBASE_BUCKET"),
        },
      },
    },
  },
  // ...
});

Configuration Strapi + Pinata

Configuration Strapi + Pinata
VariableTypeDescriptionRequired
jwtstringPinata JWT (Secret access token)yes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module.exports = ({ env }) => ({
  // ...
  upload: {
    config: {
      provider: "strapi-provider-upload-ipfs-storage",
      providerOptions: {
        defaultStorage: "pinata",
        pinata: {
          // https://app.pinata.cloud/keys
          jwt: env("PINATA_JWT"),
        },
      },
    },
  },
  // ...
});

Configuration Strapi + Fleek

Configuration Strapi + Fleek
VariableTypeDescriptionRequired
keystringFleek Storage API keyyes
secretstringFleek Storage API secretyes
bucketstringFleek bucket name (e.g. 71a...-bucket)yes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
module.exports = ({ env }) => ({
  // ...
  upload: {
    config: {
      provider: "strapi-provider-upload-ipfs-storage",
      providerOptions: {
        defaultStorage: "fleek",
        fleek: {
          // https://app.fleek.co/#/settings/general/profile
          key: env("FLEEK_KEY"),
          secret: env("FLEEK_SECRET"),
          bucket: env("FLEEK_BUCKET"),
        },
      },
    },
  },
  // ...
});

Configuration Strapi + Web3

Configuration Strapi + Web3
VariableTypeDescriptionRequired
tokenstringWeb3 Storage API Tokenyes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module.exports = ({ env }) => ({
  // ...
  upload: {
    config: {
      provider: "strapi-provider-upload-ipfs-storage",
      providerOptions: {
        defaultStorage: "web3",
        web3: {
          // https://web3.storage/tokens/
          token: env("WEB3_TOKEN"),
        },
      },
    },
  },
  // ...
});

Configuration Strapi + Lighthouse

Configuration Strapi + Lighthouse
VariableTypeDescriptionRequired
tokenstringLighthouse Storage API Tokenyes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module.exports = ({ env }) => ({
  // ...
  upload: {
    config: {
      provider: "strapi-provider-upload-ipfs-storage",
      providerOptions: {
        defaultStorage: "lighthouse",
        lighthouse: {
          // https://files.lighthouse.storage/dashboard/apikey
          token: env("LIGHTHOUSE_TOKEN"),
        },
      },
    },
  },
  // ...
});

Security Middleware Configuration

Due to the default settings in the Strapi Security Middleware you will need to modify the contentSecurityPolicy settings to properly see thumbnail previews in the Media Library. You should replace strapi::security string with the object bellow instead as explained in the middleware configuration documentation.

./config/middlewares.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module.exports = [
  // ...
  {
    name: "strapi::security",
    config: {
      contentSecurityPolicy: {
        useDefaults: true,
        directives: {
          "connect-src": ["'self'", "https:"],
          "img-src": [
            "'self'",
            "data:",
            "blob:",
            "dl.airtable.com",
            "*.ipfs.dweb.link", // ipfs.tech
            "*.ipfs.cf-ipfs.com", // cloudflare.com
            "*.ipfs.w3s.link", // web3.storage
          ],
          "media-src": [
            "'self'",
            "data:",
            "blob:",
            "dl.airtable.com",
            "*.ipfs.dweb.link", // ipfs.tech
            "*.ipfs.cf-ipfs.com", // cloudflare.com
            "*.ipfs.w3s.link", // web3.storage
          ],
          upgradeInsecureRequests: null,
        },
      },
    },
  },
  // ...
];

Links


(c) Alex Baker

Install now

npm install strapi-provider-upload-ipfs-storage

STATS

12 GitHub stars3 weekly downloads

Last updated

459 days ago

Strapi Version

Unavailable

Related plugin

Upload

Useful links

Create your own plugin

Check out the available plugin resources that will help you to develop your plugin or provider and get it listed on the marketplace.