Hi everyone! I’m glad to be part of this community!
Hopefully someone can help me with my following issue!
What I’m trying to do is to generate the IPFS hash of a file while the user is using a PWA offline (just a web app). If I’m connected, I can just ipfs.add
to add a file and get the file hash, no sweat. Now, if I’m offline I need to hash it locally and want the same output as if I added to an IPFS node.
This is the code that I got so far:
import { importer } from "ipfs-unixfs-importer";
import IPLD from "ipld";
import ipldInMemory from "ipld-in-memory";
async function* asAsyncIterable(arr: Uint8Array) {
yield* [arr];
}
const ipfsQhashFile = async (file: File) => {
const fileName = file.name;
const bytes = new Uint8Array(await file.arrayBuffer());
const ipld = await ipldInMemory(IPLD, {});
const source = {
path: fileName,
content: asAsyncIterable(bytes), //AsyncIterable<Uint8Array>
};
const cids = [];
for await (const entry of importer(source, ipld)) {
console.info(">>> entry", entry);
cids.push(entry);
}
};
And when I run the function ipfsQhashFile
with a file that the user selected on a fileinput field I receive the following error:
Error: `format` parameter must be number (multicodec)
at IPLDResolver.put (index.js:197)
at persist (persist.js:33)
at :3000/async http:/localhost:3000/static/js/vendors~main.chunk.js:32539
at async parallelBatch (index.js:36)
at async buildFileBatch (index.js:47)
at async batch (index.js:20)
at async reduceToParents (balanced.js:22)
at async parallelBatch (index.js:36)
at async treeBuilder (tree-builder.js:95)
at async importer (index.js:59)
at async ipfsQhashFile (ipfs.ts:21)
Does anyone know what I’m missing?
Thank you!