Multiple Organization Design

For multiple organizations or a organization has more function unit.

Step-by-Step Tutorial

Login to Multichain Storage

Create Buckets for Organizations

Click "Bucket Storage" -> "Create Bucket", then enter your bucket name.

Use create multiple buckets for each organization or function.

Create folders for each user

First, install Swan IPFS Storage python SDK

pip install python-mcs-sdk

Swan IPFS Storage is a bucket-based object storage, insider bucket, folder, sub-folders and file name is defined as the object key, file content is defined as object value.

e.g. If we have a function called OnchainStorage and a user wallet 0x165CD37b4C644C2921454429E7F9358d18A45e14. Now we want to use this wallet as a folder name and upload a file called flower.jpeg

def upload_replace_file(file_path, bucket_name, dest_file_path):
    :param bucket_name: the bucket name user want to upload
    :param dest_file_path: the destination of the file you want to store exclude the bucket name
    :return: File Object
    """
    mcs_api = APIClient(api_key, access_token,network)
    bucket_client = BucketAPI(mcs_api)
    # check if file exist
    file_data = bucket_client.get_file(bucket_name, dest_file_path)
    if file_data:
        print("File exist,replace file: %s" % file_path)
        bucket_client.delete_file(bucket_name, dest_file_path)
    file_data = bucket_client.upload_file(bucket_name, dest_file_path, file_path)
    return file_data

Then we can upload the user file to the bucket:

mcs_file = upload_replace_file(file_path, "OchainStorage",os.path.join("0x165CD37b4C644C2921454429E7F9358d18A45e

You should see the following file stored in your multichain bucket.

This process can be repeated with other organizations or functions for your application.

Put everything together:

import os

from mcs import APIClient, BucketAPI


def upload_replace_file(file_path, bucket_name, dest_file_path):
    """
    Upload a file by file path, bucket name and the target path
    :param file_path: the source file path
    :param bucket_name: the bucket name user want to upload
    :param dest_file_path: the destination of the file you want to store exclude the bucket name
    :return: File Object
    """
    mcs_api = APIClient(api_key, access_token,network)
    bucket_client = BucketAPI(mcs_api)
    # check if file exist
    file_data = bucket_client.get_file(bucket_name, dest_file_path)
    if file_data:
        print("File exist,replace file: %s" % file_path)
        bucket_client.delete_file(bucket_name, dest_file_path)
    file_data = bucket_client.upload_file(bucket_name, dest_file_path, file_path)
    return file_data


if __name__ == '__main__':
    api_key = "XXXX"
    access_token = "xxxxxxx"
    network = "polygon.mainnet"
    file_path = 'data/apple.jpeg'
    # file_path is the path relative to the current file
    # object_name is your target path
    mcs_file = upload_replace_file(file_path, "OnchainStorage",
                                   os.path.join("0x165CD37b4C644C2921454429E7F9358d18A45e14", "apple.jpeg"))

Last updated

Was this helpful?