Pinata IPFS API 一直拒绝 pinFileToIPFS 请求

Pinata IPFS API Keeps denying pinFileToIPFS requests

我一直在尝试将文件从 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 });
    }