This plugin stores uploaded files using Relay Blob Bundle instead of using the local filesystem.
https://github.com/digital-blueprint/relay-blob-bundle
https://github.com/digital-blueprint/relay-blob-library
# from kanboard root directory
cd plugins
git clone [email protected]:digital-blueprint/plan-blob-storage-plugin.git
mv plan-blob-storage-plugin BlobStorage
cd BlobStorage
composer install --no-devNote: Plugin folder is case-sensitive.
The plugin can be configured in two ways: through the user interface or using the config file.
Go to Settings > Integrations > Blob File Storage
Add those config parameters in your config.php:
define('BLOB_KEY', '12345678901234567890123456789012345678901234567890123456789012');
define('BLOB_API_HOST', 'https://blog-api-host.com');
define('BLOB_BUCKET_ID', 'your-bucket-id');
define('BLOB_OAUTH_IDP_URL', 'https://your.oauth.server');
define('BLOB_CLIENT_ID', 'your-client-id');
define('BLOB_CLIENT_SECRET', 'your-client-secret');- PHP >= 8.1
 - Kanboard >= 1.2.1
 
---
title: Blob Storage Plugin
---
graph TB
    subgraph BlobApi
        addFile["addFile()"]
        getFiles["getFiles()"]
        removeFiles["removeFiles()"]
    end
    subgraph BlobStorage
        moveFile["moveFile()"] --> addFile
        put["put()"] --> addFile
        output["output()"] --> getFiles
        get["get()"] --> getFiles
        remove["remove()"] --> removeFiles
    end
    subgraph BlobTaskFileModel
        uploadFiles["uploadFiles()"] --> uploadFile
        uploadFile["uploadFile()"] --> moveFile
        uploadScreenshot["uploadScreenshot()"] --> uploadContent
        uploadContent["uploadContent()"] --> put
    end
    subgraph FileModel
        Fremove["remove()"] --> remove
    end
    subgraph ViewFileController
        download["download()"] --> output
        thumbnail["thumbnail()"] --> output
        renderFileWithCache["renderFileWithCache()"] --> output
        getFileContent["getFileContent()"] --> get
    end
    subgraph BlobTaskFileController
        Tsave["save()"] --> uploadFiles
        Tscreenshot["screenshot()"] --> uploadScreenshot
        Tremove["remove()"] --> Fremove
    end
    subgraph BlobProjectFileController
        Psave["save()"] --> uploadFiles
        Pscreenshot["screenshot()"] --> uploadScreenshot
        Premove["remove()"] --> Fremove
    end
    