index.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. 'use strict';
  2. // https://github.com/ipfs/js-ipfs/tree/ipfs%400.55.4/docs/core-api
  3. const IPFS = require('ipfs');
  4. function create_pin_tag(node, cid) {
  5. const item = document.createElement('li');
  6. const link = document.createElement('a');
  7. link.href = "https://dweb.link/ipfs/" + cid.toString();
  8. link.innerText = cid.toString();
  9. item.appendChild(link);
  10. const unpinButton = document.createElement('button');
  11. unpinButton.innerText = 'unpin';
  12. unpinButton.onclick = async function() {
  13. await node.pin.rm(cid);
  14. unpinButton.remove();
  15. };
  16. item.appendChild(unpinButton);
  17. return item;
  18. }
  19. async function initialize() {
  20. const node = await IPFS.create();
  21. const node_info = await node.id();
  22. console.log('ipfs node id: ' + node_info.id);
  23. const pinList = document.createElement('ul');
  24. const fileReader = new FileReader();
  25. fileReader.onload = async function(event) {
  26. const file = {
  27. path: fileSelector.files[0].name,
  28. content: fileReader.result,
  29. };
  30. const pin = await node.add(file, {wrapWithDirectory: true});
  31. pinList.appendChild(create_pin_tag(node, pin.cid));
  32. };
  33. const fileSelector = document.createElement('input');
  34. fileSelector.type = 'file';
  35. fileSelector.onchange = function() {
  36. // .readAsBinaryString() breaks binary files somehow
  37. fileReader.readAsArrayBuffer(fileSelector.files[0]);
  38. };
  39. document.body.appendChild(fileSelector);
  40. for await(const { cid, type } of node.pin.ls()) {
  41. if(type != 'indirect') {
  42. pinList.appendChild(create_pin_tag(node, cid));
  43. }
  44. }
  45. document.body.appendChild(pinList);
  46. }
  47. initialize();