首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(hashlips_art_engine-1.1.2_修补程序_v5) "path“参数必须是string类型。接收未定义

(hashlips_art_engine-1.1.2_修补程序_v5) "path“参数必须是string类型。接收未定义
EN

Stack Overflow用户
提问于 2022-04-08 00:07:52
回答 1查看 224关注 0票数 -1

我试图为10个JSON文件更新一些元数据,其中一些被正确更新,另一些则给出以下错误。

下面你可以看到6个文件给我错误和4个文件是正确的更新。

错误:TypeError ERR_INVALID_ARG_TYPE:"path“参数必须是字符串类型。接收未定义

错误:TypeError ERR_INVALID_ARG_TYPE:"path“参数必须是字符串类型。接收未定义

错误:TypeError ERR_INVALID_ARG_TYPE:"path“参数必须是字符串类型。接收未定义

错误:TypeError ERR_INVALID_ARG_TYPE:"path“参数必须是字符串类型。接收未定义

错误:TypeError ERR_INVALID_ARG_TYPE:"path“参数必须是字符串类型。接收未定义

错误:TypeError ERR_INVALID_ARG_TYPE:"path“参数必须是字符串类型。接收未定义

5.png上传& 5.json更新!

4.png上传& 4.json更新!

1.png上传& 1.json更新!

7.png上传& 7.json更新!

这是使用以下方法的node.js代码im:

代码语言:javascript
复制
onst FormData = require('form-data');
const fetch = require('node-fetch');
const path = require("path");
const basePath = process.cwd();
const fs = require("fs");

fs.readdirSync(`${basePath}/build/images`).
forEach(file => {
  const formData = new FormData();
  const fileStream = fs.createReadStream(`${basePath}/build/images/${file}`);
  formData.append("file", fileStream);

  let url = 'https://api.nftport.xyz/v0/files';

  let options = {
    method: 'POST',
    headers: {
      Authorization: 'SecretApiCode',
    },
    body: formData
  };

  fetch(url, options)
    .then(res => res.json())
    .then((json) => {
      const fileName = path.parse(json.file_name).name;
      let rawdata = fs.readFileSync(`${basePath}/build/json/${fileName}.json`);
      let metaData = JSON.parse(rawdata);

      metaData.file_url = json.ipfs_url;

      fs.writeFileSync(`${basePath}/build/json/${fileName}.json`,
        JSON.stringify(metaData, null, 2));

      console.log(`${json.file_name} uploaded & ${fileName}.json updated!`);
      })
    .catch(err => console.error('error:' + err));

});

我有10 have文件:

1、png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png

和10个JSON文件

1.json 2.json 3.json 4.json 5.json 6.json 7.json 8.json 9.json 10.json

EN

回答 1

Stack Overflow用户

发布于 2022-08-10 16:53:51

尝尝这个。如果将标记更改为v1.2.0,还可以在codeSTACKr/cre-10k-NFT-collection“git存储库中找到它。

这是在uploadfiles.js里

代码语言:javascript
复制
const FormData = require("form-data");
const fetch = require("node-fetch");
const path = require("path");
const basePath = process.cwd();
const fs = require("fs");

const AUTH = 'Your API KEY GOES HERE';
const TIMEOUT = 1000; // Milliseconds. Extend this if needed to wait for each upload. 1000 = 1 second.

const allMetadata = [];

async function main() {
  const files = fs.readdirSync(`${basePath}/build/images`);
  files.sort(function(a, b){
    return a.split(".")[0] - b.split(".")[0];
  });
  for (const file of files) {
    const fileName = path.parse(file).name;
    let jsonFile = fs.readFileSync(`${basePath}/build/json/${fileName}.json`);
    let metaData = JSON.parse(jsonFile);
    if(!metaData.file_url.includes('https://')) {
      const response = await fetchWithRetry(file);
      metaData.file_url = response.ipfs_url;
  
      fs.writeFileSync(
        `${basePath}/build/json/${fileName}.json`,
        JSON.stringify(metaData, null, 2)
      );
      console.log(`${response.file_name} uploaded & ${fileName}.json updated!`);
    } else {
      console.log(`${fileName} already uploaded.`);
    }

    allMetadata.push(metaData);
  }
  fs.writeFileSync(
    `${basePath}/build/json/_metadata.json`,
    JSON.stringify(allMetadata, null, 2)
  );
}

main();

function timer(ms) {
  return new Promise(res => setTimeout(res, ms));
}

async function fetchWithRetry(file)  {
  await timer(TIMEOUT)
  return new Promise((resolve, reject) => {
    const fetch_retry = (_file) => {
      const formData = new FormData();
      const fileStream = fs.createReadStream(`${basePath}/build/images/${_file}`);
      formData.append("file", fileStream);

      let url = "https://api.nftport.xyz/v0/files";
      let options = {
        method: "POST",
        headers: {
          Authorization: AUTH,
        },
        body: formData,
      };

      return fetch(url, options).then(async (res) => {
          const status = res.status;

          if(status === 200) {
            return res.json();
          }            
          else {
            console.error(`ERROR STATUS: ${status}`)
            console.log('Retrying')
            await timer(TIMEOUT)
            fetch_retry(_file)
          }            
      })
      .then(async (json) => {
        if(json.response === "OK"){
          return resolve(json);
        } else {
          console.error(`NOK: ${json.error}`)
          console.log('Retrying')
          await timer(TIMEOUT)
          fetch_retry(_file)
        }
      })
      .catch(async (error) => {  
        console.error(`CATCH ERROR: ${error}`)  
        console.log('Retrying')    
        await timer(TIMEOUT)    
        fetch_retry(_file)
      });
    }        
    return fetch_retry(file);
  });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71790267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档