Pinata IPFS API持续拒绝pinFileToIPFS请求



我一直试图将一个文件从s3固定到ipfs。

Pinata一直告诉我AccessDenied:Access Denied,状态代码为403。

当我尝试/testAuthentication端点时,我得到了成功的响应。我仔细检查了我的钥匙和秘密,甚至建立了新的账户,看看这是否是账户问题。这是我的代码:

try {
await axios.get(testURL, {

headers: {

pinata_api_key: apiKey,
pinata_secret_api_key: apiSecret,
}
})
.then(function (response) {
//handle response here
console.log(response)
})
.catch(function (err) {
//handle error here
console.log(err);
throw new Error(err)
});

const request = JSON.parse(event.body);

for (const [key, value] of Object.entries(request)) {
console.log(`${key}: ${value}`);


}
let s3 = new AWS.S3();
let s3Stream = s3
.getObject({
Bucket: s3Bucket,
Key: fileName,
})
.createReadStream();
let data = new FormData();
data.append('file', s3Stream, {
filename: fileName //required or it fails
});
await axios.post(url, data, {
maxBodyLength: 'Infinity', //this is needed to prevent axios from erroring out with large files
headers: {
'Content-Type': `multipart/form-data; boundary=${data._boundary}`,
pinata_api_key: apiKey,
pinata_secret_api_key: apiSecret
}
})
.then(function (response) {
//handle response here
return ResponseUtility.Build(200, { Message: "Image was uploaded to IPFS" , url : response});
})
.catch(function (err) {
//handle error here
console.log(err);
throw new Error(err)
});

}
catch (error) {

return ResponseUtility.Build(500, { Message: error.message });
}

原来我试图上传的S3映像不存在。除此之外,我不得不使用调整Axios请求来固定文件。

这是我的新代码:

const pinataSDK = require("@pinata/sdk");
const FormData = require('form-data');
var form = new FormData();
try {
const pinata = pinataSDK(apiKey, apiSecret);
pinata.testAuthentication().then((result) => {
console.log("Authenticated ",result);
}).catch((err) => {
console.log(err);
throw new Error(err)
});

let s3 = new AWS.S3();
const request = JSON.parse(event.body);

for (const [key, value] of Object.entries(request)) {
console.log(`${key}: ${value}`);
}

var params = {
Bucket: s3Bucket,
Key: fileName
};


try {
await s3.headObject(params).promise()
console.log("File Found in S3")
} catch (err) {
console.log("File not Found ERROR : " + err)
throw new Error(err)
}
let s3Stream =  s3
.getObject({
Bucket: s3Bucket,
Key: fileName,
})
.createReadStream();

form.append('file', s3Stream, {
filename: fileName //required or it fails
});

var config = {
method: 'post',
url: url,
'maxBodyLength': 'Infinity',
headers: {
'Content-Type': `multipart/form-data; boundary=${form._boundary}`,
'pinata_api_key': apiKey,
'pinata_secret_api_key': apiSecret,
...form.getHeaders()
},
data: form
};

let res =  await axios(config)

if (res.status === 200 && res.data)
return ResponseUtility.Build(200, res.data);
else
throw new Error(JSON.stringify({statusCode : res.status, Message : "Error occured while uploading file to IPFS"}))   

}
catch (error) {

return ResponseUtility.Build(500, { Message: error.message ? error.message : error });
}

最新更新