我试图为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:
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
发布于 2022-08-10 16:53:51
尝尝这个。如果将标记更改为v1.2.0,还可以在codeSTACKr/cre-10k-NFT-collection“git存储库中找到它。
这是在uploadfiles.js里
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);
});
}https://stackoverflow.com/questions/71790267
复制相似问题