Как загрузить каталог с помощью ipfs-http-клиента в ipfs

#node.js #file-upload #ipfs #directory-upload

#node.js #загрузка файла #ipfs #каталог-загрузка

Вопрос:

Каждый раз, когда я пытался загрузить каталог, он выдает мне эту ошибку
AbortError: The user aborted a request. at abort (C:usersanikdesktopappnode_modulesnode-fetchlibindex.js:1418:16) at AbortSignal.abortAndFinalize (C:usersanikdesktopappnode_modulesnode-fetchlibindex.js:1433:4) at AbortSignal.dispatchEvent (C:usersanikdesktopappnode_modulesevent-target-shimdistevent-target-shim.js:818:35) at abortSignal (C:usersanikdesktopappnode_modulesabort-controllerdistabort-controller.js:52:12) at AbortController.abort (C:usersanikdesktopappnode_modulesabort-controllerdistabort-controller.js:91:9) at AbortSignal.onAbort (C:usersanikdesktopappnode_modulesany-signalindex.js:13:16) at AbortSignal.dispatchEvent (C:usersanikdesktopappnode_modulesevent-target-shimdistevent-target-shim.js:818:35) at abortSignal (C:usersanikdesktopappnode_modulesabort-controllerdistabort-controller.js:52:12) at AbortController.abort (C:usersanikdesktopappnode_modulesabort-controllerdistabort-controller.js:91:9) at AbortSignal.onAbort (C:usersanikdesktopappnode_modulesany-signalindex.js:13:16) { type: 'aborted', message: 'The user aborted a request.' }
Я не понимаю, почему возникает эта ошибка. Я пробовал отладку, но не мог понять.

 app.post("/upload", async (req, res) => {
 
  if(req.files.upload) {
    // console.log(req.files.upload);
    let result = folder_upload(req);
  }

    res.render("transfer");
  
});

async function folder_upload(req) {
  
  const allFiles = req.files.upload;
  const folder = req.body['upload-file-name'];
  console.log(folder);
  let ipfsId;
  allFiles.forEach(function(item) {
    // console.log("item ", item);
    try {
      const fileDetails = {
        path: folder  "/"  item.name,
        content: item
      }
      const options = {
        wrapWithDirectory: true,
        progress: (prog) => console.log(`received: ${prog}`)
      }
      ipfs.add(fileDetails, options) // === [line 1] ===
        .then((response) => { 
          console.log(response);
          // CID of wrapping directory is returned last
          ipfsId = response[response.length - 1].hash;
          console.log(ipfsId);
          ipfs.setState({ added_file_hash: ipfsId });
        }).catch((err) => {   // === [line 2] ===
          console.error(err);
        });
    } catch (error) {
      console.log("Error exception -", error);
    }
  });
  
}
  

Во время отладки код останавливается на [строка 1], затем переходит к [строка 2] и выполняет блок catch .

Комментарии:

1. Поскольку вы не указали, какую библиотеку ipfs вы используете в своем примере, весьма вероятно, что ваша библиотека ipfs не поддерживает одновременное добавление нескольких файлов для загрузки. Поэтому, когда вы используете ipfs.add для второго файла, он прервет загрузку первого файла и выдаст ошибку.

2. Он упомянул в названии, которое он использует ipfs-http-client