0
votes

I am implementing Kubo RPC API in Node JS to upload files to IPFS, Uploads works, but when I try to get content of file using ifps.cat(CID) it returns may be plain text, stream or chunks (may be encoded, I don't know which type of encoding is it.).

My question is how do I convert this data to a readable image or pdf, below code create image which is unreadable or pdf which is empty.

node JS Code:

axios.post('http://127.0.0.1:5001/api/v0/cat?arg=QmYjChbAEthEYz7qiR8XHHFS9uRZcMsfZVukpAcCF4q6xw')
  .then(async function (response) {
    console.log(response.data);
    fs.writeFile("./myfile.png",response.data, (err) => {
      if (err) throw err;
      res.status(200).send("files saved.");
    });
  })
  .catch(function (error) {
    console.log(error);
    res.status(500).send(error);
  });

Console log: enter image description here

Image created by: enter image description here

In that screenshot the initial header with "Qm..." is an IPFS object header, which is sent over with ipfs.get, you'd want ipfs.cat. - Discordian
Thank you for your response, but may be I was unable to clear the things, data return by API is correct but encoded, I just want to decode it (like binary decode or utf8 etc. I don't know). my question was about how do I decode or collect these data to make files and images - Mubashir Farooq
ipfs.cat returns the file exactly as it was when it was added to IPFS, without any encoding. If there's encoding, it would have had to have been encoded when it was added. If I do ipfs add myimage.png then do ipfs cat cidofmyimage > myimage2.png then myimage.png and myimage2.png will be identical. - Discordian
@MubashirFarooq for whatever reason I can't retrieve the CID you're sharing, it's not available whenever I go to look at it. If you give me a CID that's not working for you, that's available (you can back up the data to web3.storage or something to do that), I'll investigate and might be able to get you a solid answer. - Discordian
Again the goal post moved so your Data for a png file (if NOT decoded from binary) should be 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 which if you look at your image is a direct match since 0D 0A is the first line EOL \x89 \x50 \x4E \x47\r\n followed by the \x1A(escape)\n followed by three \x00 and \rIHDR thus data: is binary.png, but again your console is text with diamonds, so save it as binary - K J