Scalable File Storage with CanDB
Implement decentralized file storage and management on the Internet Computer using CanDB, including standards for metadata and chunking.

Standards
filemetadata#<sha256> filechunk#<sha256>#<chunkid>
// routing.services.ts
export async function putFile(
serviceClient: ActorClient<IndexCanister, AppService | UserService>,
pk: string, // app
sha256: string, // d626b6fc8303502056664d2ad9af32581ddd5fbf902d794890e7790f4e87c3a7
inFile: FileWithChunks, // { metadata: { name: string, size: bigint, type: string }, chunks: Uint8Array[] }
) {
let fileSk: string = `filemetadata#${sk}`;
await serviceClient.update<any['putObject']>(pk, fileSk, (actor: any) =>
actor.putObject(fileSk, { filemetadata: inFile.metadata })
);
// put file chunks
for (let [index, val] of inFile.chunks.entries()) {
let chunkSk = `filechunk#${sk}#${pack(index, 'hex')}`;
let chunkArray = [...new Uint8Array(val)];
await serviceClient.update<any['putObject']>(pk, chunkSk, (actor: any) =>
actor.putObject(chunkSk, { filechunk: chunkArray })
);
}
}